Dart: Invertir un número entero o int
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:
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:
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:
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.