Como inverter um número

Suponha que você deseja transformar um número qualquer no seu valor invertido. Por exemplo: 3210, se torne 123. Como fazer isso de maneira programática?
Uma das maneiras mais simples é você transformar numa string, invertê-la e converter novamente em um número, entretanto há uma outra forma sem ser necessária a conversão para string. Você pode ir dividindo por 10 no número original (recuperando a unidade, dezena, centena, ...) e multiplicando por 10 no invertido (inserindo os valores como centena, dezena, unidade).

int rev = 0;
while(n>0) {
    int lDigit = n%10;
    rev = (rev*10)+lDigit;
    n/=10;
}
System.out.println(rev);

No nosso exemplo: 3210. A linha 3, irá recuperar o resto da divisão de 3210 por 10, que é 0. Esse resultado é atribuído ao nosso número invertido, já que na primeira iteração o valor de rev é 0. Removemos a parte da unidade do nosso número, dividindo ele por 10 (n = 3210/10 = 321).

Na segunda iteração, na linha 3, o resto da divisão de 321 por 10 é 1. Esse resultado é atribuído ao nosso número invertido, já que ele ainda está com o valor 0, portanto rev = 1. Removemos a parte das dezenas do nosso número, dividindo ele novamente por 10 (n=321/10 = 32).

Na terceira iteração, na linha 3, o resto da divisão de 32 por 10 é 2. O valor de rev é multiplicado por 10 (1*10 = 10) e atribuído o valor do resto da divisão (rev = 10+2 = 12). Removemos a parte das centenas do nosso número, dividindo ele novamente por 10 (n=32/10 = 3).

Na quarta iteração finalizamos e n a linha 3 o resto da divisão de 3 por 10 é 3. O valor de rev é multiplicado por 10 (12*10 = 120) e atribuído o valor do resto da divisão (rev = 120+3). Removemos a parte do milhar do nosso número, dividindo ele novamente por 10 (n=3/10 = 0).

Com isso temos o número invertido (rev) com o valor 123 e o n com o valor 0, saindo do loop e com o nosso número invertido, como queríamos.

Sobre: Thiago Galbiatti Vespa

Thiago Galbiatti Vespa é mestre em Ciências da Computação e Matemática Computacional pela USP e bacharel em Ciências da Computação pela UNESP. Coordenador de projetos do JavaNoroeste, membro do JCP (Java Community Process), consultor Oracle, arquiteto de software de empresas de médio e grande porte, palestrante de vários eventos e colaborador de projetos open source. Possui as certificações: Oracle Certified Master, Java EE 5 Enterprise Architect – Step 1, 2 and 3; Oracle WebCenter Portal 11g Certified Implementation Specialist; Oracle Service Oriented Architecture Infrastructure Implementation Certified Expert; Oracle Certified Professional, Java EE 5 Web Services Developer; Oracle Certified Expert, NetBeans Integrated Development Environment 6.1 Programmer; Oracle Certified Professional, Java Programmer; Oracle Certified Associate, Java SE 5/SE 6