Jump to content

Função para trocar dígitos de um inteiro


NosferatuPT
 Share

Recommended Posts

Tenho de fazer um problema que consiste em criar uma função que aceite como parâmetro um inteiro e que troque os dígitos do mesmo.

Até agora tenho isto:

#include<stdio.h>

int troca(int num)
   {  int i=0;
       while(i < num)
          {
             scanf("%d",&num);
             num = (num/10)%10;
             i++;
             }
}

Mas acho que o que fiz foi apenas ler os dígitos um a um. Agora preciso de trocá-los.. mas não sei como ?

Ideias pf 🙂

Link to comment
Share on other sites

Esse while + scanf acho foi alguma confusão. Pensa bem naquilo que pretendes fazer.

Quanto à troca dos digitos, se o inverso de 100 for 1 (isto é, não precisas de apresentar os trailing 0's), podes fazer algo como

123 % 10 = 3

123 / 10 = 12 (divisão inteira)

12 % 10 = 2

12 / 10 = 1

1 % 10 = 1

1 / 10 = 0

321 = ((3 * 10) + 2) * 10) + 1

"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Link to comment
Share on other sites

Não tenho a certeza nem nunca fiz nada com eles mas penso que operadores bit a bit são capazes de te ajudar.

Operações bit a bit ajudam bastante quando trabalhas com potências de base 2, mas como estamos a falar de base 10 (décimal), essas operações não servem.

"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Link to comment
Share on other sites

Esse while + scanf acho foi alguma confusão. Pensa bem naquilo que pretendes fazer.

Quanto à troca dos digitos, se o inverso de 100 for 1 (isto é, não precisas de apresentar os trailing 0's), podes fazer algo como

123 % 10 = 3

123 / 10 = 12 (divisão inteira)

12 % 10 = 2

12 / 10 = 1

1 % 10 = 1

1 / 10 = 0

321 = ((3 * 10) + 2) * 10) + 1

Percebido 🙂 Eu já suspeitava que seria algo assim..

É que a parte complicada para mim nem é fazer o raciocínio.. o difícil é passar para código.

Então, tenho de fazer com que o numero seja dividido por 10 (resto da divisão) e depois na mesma por 10 (sem ser a divisão com o resto). Mas o valor dessa última divisão tem de passar para o início do ciclo para ele considerar esse o número e voltar a fazer a mesma coisa até ser 0. Eu percebi.

Agora, como é que faço o while disso?...  :wallbash:

Link to comment
Share on other sites

Podes começar por uma aproximação em pseudo-código para te ajudar a estruturar o pensamento. Depois, com a prática, começas a conseguir partir logo para o código.

Enquanto o número é diferente de 0   // while (num != 0)
    pegar no resto da divisão
    dividir num por 10
    actualizar o resultado
return resultado

"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Link to comment
Share on other sites

Podes começar por uma aproximação em pseudo-código para te ajudar a estruturar o pensamento. Depois, com a prática, começas a conseguir partir logo para o código.

Enquanto o número é diferente de 0   // while (num != 0)
    pegar no resto da divisão
    dividir num por 10
    actualizar o resultado
return resultado

Nunca fui adepto de pseudo-código... 🙂 Mas pode fazer jeito 🙂

Muito obrigado.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.