• Matéria: Informática
  • Autor: leonardobazani65
  • Perguntado 5 anos atrás

Dado um número inteiro de 3 dígitos, calcular o número formado pelos dígitos do número dado na
forma inversa. Por exemplo: se for dado 348, imprimir 843. Verificar se o número tem 3 dígitos.
Alguém sabe como fazer isso em linguagem C?

Respostas

respondido por: GustavoHenriqu33
1

Resposta:

Explicação:

O maior problema é pegar um dígito individual. Você poderia usar strings, mas isso deixa a questão fácil demais.

Por exemplo, o número 123 deveria gerar a saída 321.

Para pegar a casa das centenas, vemos quantas vezes o número 100 cabe em 123.

Então: 123/100 (divisão inteira!). Nesse caso, resultará em 1.

Para pegar as casas das dezenas, devemos pegar o resto da divisão passada e ver quantas vezes o número 10 cabe nela.

Então: (123 % 100) / 10. 123 % 10 é 23 e 23/10 é 2.

Para pegar as casas das unidades, devemos pegar o resto da divisão passada, ao invés de divisão inteira.

Então ao invés de fazer 23/10, fazemos 23 % 10. É 3.

Juntando tudo, temos 1, 2 e 3, cada um desses valores em variáveis diferentes.

Agora basta colocar tudo junto. A terceira variável é multiplicada por 100 (centenas), a segunda variável é multiplicada por 10 (dezenas), a primeira variável é multiplicada por 1 (ou seja, fazemos nada com ela).

3 * 100 + 2 * 10 + 1 * 1 = 300 + 20 + 1 = 321, que é 123 invertido.


GustavoHenriqu33: Você consegue fazer um algoritmo recursivo que faz isso com uma quantidade indefinida de casas.
GustavoHenriqu33: E não só 3, como o problema sugere.
GustavoHenriqu33: Basicamente pense que o dígito da primeira casa é multiplicado por 10^0 (1), o segundo é multiplicado por 10^1 (10), etc... Então para achar um dígito de índice "i", encontramos o número de "i" até 0 e dividimos por 10^i, considerando que "i" começa em 0 na casa mais à direita e vai aumentando à esquerda.

Exemplo: Para encontrar o segundo dígito ("i" é 1) de 123, fazemos:
23 / 10^1 = 2.
GustavoHenriqu33: Para achar o número entre "i" até 0, fazemos o valor entre "i+1" até 0 e aplicamos o módulo entre ele e 10^("i+1").
GustavoHenriqu33: Exemplo:

O número entre os índices 1 e 0 (ou seja, "i" é 1) de 123 é:

123 % 10^(1+1) = 123 % 10^(2) = 123 % 100 = 23
GustavoHenriqu33: Com isso dá pra fazer algo recursivo, como falei antes.
GustavoHenriqu33: Ah, e pra checar se o número tem 3 dígitos, você pode testar se o número dividido por 100 é > 0. Se for maior, significa que o número 100 cabe no número algumas vezes, logo, ele tem pelo menos 3 casas. Você também precisa limitar checando se o número dividido por 1000 é 0. Se for 0, significa que o número 1000 não cabe no número digitado, logo ele não tem 4 ou mais casas.

Combinando essas duas condições, temos que o número não pode ter menos que 3 casas e não pode ter mais que 3 casas.
Perguntas similares