Estou com uma dúvida já há vários dias em um código sobre inverter valores, ou seja, se eu informo o valor 7854, o código me devolve 4587. O problema maior é que o número pode ser do tamanho infinito, logo, como não tem um tamanho definido, não estou conseguindo pensar em alguma lógica para fazer a inversão. O exercício recomenda fazer com estrutura de repetição, apenas, mas não consegui. Pensei um pouco mais além, tentando usar lista[] ou split(), mas infelizmente não saiu nada. De toda forma, agradeço desde já e envio o enunciado:
Codifique um software que leia um número inteiro e crie um novo número em ordem inversa do fornecido. Por exemplo, se a entrada for 7395 a saída será 5937. Em caso de valores negativos, deve-se preservar o sinal.
Entrada
Uma entrada int.
Saída
Uma saída contendo o valor inverso, seguido de quebra de linha.
Use a boa e velha matemática:
num = int(input('Digite um número:'))
x = abs(num) # se o número for negativo, troca o sinal
inverso = 0
while x > 0:
inverso = inverso * 10 + x % 10
x //= 10
if num < 0: # se o número é negativo, troca o sinal
inverso *= -1
print(f'{inverso}\n')
A ideia é usar o resto da divisão por 10 (x % 10
) para pegar o último digito do número, que por sua vez será o primeiro dígito do inverso.
Depois divido o número por 10: x //= 10
, que faz a “divisão inteira” (ignora o resto e as casas decimais).
Assim eu elimino o último dígito, então na próxima iteração, ao pegar o resto da divisão por 10, eu terei o penúltimo dígito. E este passa a ser o segundo dígito do inverso (para isso basta multiplicá-lo por 10 antes, pois isso “empurra” os dígitos existentes para a esquerda).
No final eu verifico o sinal, no caso do número ser negativo.
1 curtida
Muito muito obrigado! Eu tinha, por um momento, pensado em algo semelhante a isso… mas não sabia como fazer. Agora aprendi o que significa a função abs() e um pouco mais dessa lógica. Muito obrigado mesmo