While para inverter um número?

Não estou conseguindo entender a lógica de incrementação deste while:

while(num > 0)
{
	 i *= 10;
	 i += (num % 10);
	 num /= 10;
}

Poderiam me ajudar

Vou tentar explicar passo a passo.

while(num > 0){   //enquanto num for maior que 0,
                  //o código dentro do while continuará rodando.

i *= 10;   //aqui o valor de i será multiplicado por 10;

i += (num % 10); // aqui o i já recebe o resultado da multiplicação anterior
                 // mas primeiro ele irá pegar o valor de num e dividir por dez,
                 //o resultado será o resto da divisão, agora o valor de i somado com o resto

num /= 10; //num dividido por 10.
}

Aparentemente entrará em um loop infinito. O valor de num deve ser 0 ou negativo para poder sair do while.

1 curtida

package crisis;

public class Crisis {

public static void main(String[] args) {
    /*Boa tarde, não estou conseguindo entender a lógica de incrementação deste while: 
    R: não tem incremento, mas sim atribuição
    i *= 10; --------> i = i * 10
    i += (num % 10); ------> i = i + (num % 10)
    num /= 10; ------> num = num / 10
    
    os operadores de incremento são ++i e i++ (a posição indica quando o incremento ocorren ++i na mesma linha, i++ na linha seguinte)
    os operadores de decremento são --i e i-- (cuja ordem de incremento é a da linha acima)
     */

/*inverter um número
    123456
    deve ficar como 654321
    o módulo(%) traz sempre o resto da divisão
    então se vc dividir o numero por dez
    o quociente será 65432 e o resto 1
    o resto passa para a primeira posição
    a operação deve ser repetida até que o quociente seja 0
    
    Após a primeira operação, pegue o resto e multiplique por 10  e some o novoResto, isto fará que a ordem seja garantida
    procure entender como esta formúla funciona, veja também como se calcula um número haxadecimal e binário, pois tem uma pequena semelhança
     */
    inverterNumero(1234578, 0);

}

private static void inverterNumero(int num, int resto) {
    while (num > 0) {
        resto = resto * 10 + num % 10;
        num /= 10;
    }
    System.out.println(resto);
}

}

1 curtida

Não da loop pois num /= 10 <=> num = num /10, é uma atribuição que atualiza o valor de num até 0 dentro deste while, sendo que a divisão entre dois números inteiros retorna o quociente (que será inteiro).

2 curtidas

É verdade, foi o que percebi fazendo os testes aqui. Obrigado.