Saltar al contenido principal

Dart: Invertir un número entero o int

Youtube video player

Youtube video player

En este problema, se requiere invertir un número entero int. Por ejemplo, dado el número 321, al invertirlo obtendríamos 123

Para esta solución vamos a utilizar un ciclo while, la división de módulo y división con resultado entero.

Primero debemos obtener el último dígito del número dado y este siempre va a ser el residuo de dividirlo entre 10. Por ejemplo para obtener el 1 del número 321:

Cuando dividimos entre 10, el residuo siempre es el ultimo digito

Cuando dividimos entre 10, el residuo siempre es el ultimo digito

Ahora que ya sabemos como obtener el último dígito del número dado lo que tenemos que hacer es almacenar ese dígito en una variable y eliminarlo del número dado.

int numero = 321;
int digito = numero % 10;

// TODO: eliminar el dígito del número dado
numero = ???????????;

Eliminar el último dígito del número dado es muy sencillo. Simplemente, dividimos entre 10 y vemos que el resultado siempre elimina el último dígito:

El cociente o resultado de la división no contiene el ultimo digito

El cociente o resultado de la división no contiene el ultimo digito

Entonces nuestro código quedará de esta forma:

int numero = 321;
int digito = numero % 10;

numero ~/= 10;

Ahora necesitamos repetir este código mientras número sea desigual a cero, por lo que vamos a agregar un ciclo:

int numero = 321;

// hasta que número sea 0
while (numero != 0) {
int digito = numero % 10;
numero ~/= 10;
}

Por último tenemos que crear una variable int invertido donde vamos a ir agregando el último dígito. Como cada ciclo el dígito lo debemos agregar del lado derecho del dígito anterior y no podemos utilizar la concatenación, lo que vamos a hacer es multiplicar por 10 el número invertido y sumarle el dígito. El código final quedaría de esta forma, puedes correrlo para ver los resultados:

note

Algunas personas dicen que este código no funciona si el primer dígito del número dado es 0. Por ejemplo, dado el número 0123 debería quedar 3210. Bueno la respuesta es sencilla. Al almacenar 0123 en una variable entera automáticamente se convierte en 123, ya que el cero a la izquierda no tiene valor por lo que al invertirlo quedaría 321.