2017-01-04 1 views
-3

Pour inverser un entier et le mettre dans une liste, on pourrait faire ce qui suit (où x est un entier):Quelqu'un peut-il expliquer comment inverser un entier en utilisant% 10 fonctionne?

int lastDigit = x; 
    while(lastDigit != 0) 
    { 
     list.add(lastDigit % 10); 
     lastDigit /= 10; 
    } 

Donc, si x est 502, 2 0 et 5 obtiendriez ajoutés à la liste.

Ceci est évidemment très utile, mais jusqu'à hier, je pensais que la seule façon de faire quelque chose comme ça était de convertir l'int en une chaîne en premier.

Je ne suis pas sûr si ce n'est que la connaissance commune, mais je n'avais pas vu cette méthode avant aujourd'hui. Je voudrais comprendre comment cela fonctionne au lieu de simplement le mémoriser.

Quelqu'un pourrait-il expliquer pourquoi le module de nombre 10 donne le dernier chiffre, et pourquoi le diviser par 10 donne le prochain chiffre de l'itération suivante? Pourquoi serait-il finalement égal à 0?

+1

Faites-le à la main pour quelques chiffres. Cela devrait être assez instructif! –

+2

Ceci est juste de l'arithmétique de base. L'opérateur de module vous donne le reste qui serait obtenu dans un calcul de division, donc 502% 10 est 2 parce que 502/10 = 50 plus un reste de 2. La division par dix dans la ligne suivante est effectuée en utilisant l'arithmétique entière, donc 502/10 donne un résultat de 50. Et tout nombre non négatif inférieur à 10 donnera un résultat de zéro, terminant la boucle –

+0

Vous devriez lire à propos de la fonction 'mod' et de son utilisation. Si vous prenez 'mod' d'un nombre avec' 10' il renvoie le chiffre de l'unité comme le reste. Ici, vous coupez les chiffres de l'unité en prenant 'mod' et en divisant le nombre par' 10'. – user2004685

Répondre

0

L'opérateur de module vous donne le reste de faire un calcul de division.

502% 10 est 2 car 502/10 = 50 plus un reste de 2. Par conséquent, le reste de ce calcul est 2, ce qui signifie que 2 sera ajouté à la liste.

La division par dix dans la ligne suivante est effectuée en utilisant l'arithmétique des nombres entiers, de sorte 502/10 donne un résultat de 50.

Tout nombre non négatif inférieur à 10 donnera un résultat égal à zéro, mettre fin à la boucle .

0

Pensez à % 10 comme obtenant le moins significatif (le plus à droite) chiffre dans le système décimal (d'où 10).

Et puis pensez à / 10 en décalant tous les chiffres d'un endroit vers la droite (également décimal). Vous devez évidemment le faire jusqu'à ce que le numéro soit 0. Tous les chiffres restants peuvent être compris comme des zéros en tête dans ce cas.

Dans le système binaire, vous pouvez également utiliser les opérations au niveau du bit & 1 et >> 1 au lieu de modulo (% 2) et entier (/ 2) divisions.

L'opération d'ajout de liste (ici add) est celle qui inverse l'ordre. Les opérations ci-dessus sont juste pour l'extraction des chiffres uniques.