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
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.
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);
}
}
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).
É verdade, foi o que percebi fazendo os testes aqui. Obrigado.