Reverso de un número con ceros iniciales.

¿Cómo podemos revertir un número con ceros iniciales en número? Por ejemplo: si la entrada es 004, la salida debe ser 400.

Escribí el siguiente progtwig, pero funciona solo cuando no hay ceros iniciales en la entrada.

int num; cout<<"Enter number "<>num; int rev = 0; int reminder; while(num != 0) { reminder = num % 10; rev = rev * 10 + reminder; num = num / 10; } cout<<"Reverse = "<<rev<<endl; 

¿Hay alguna manera de ingresar un número con ceros iniciales? Incluso entonces, la lógica anterior no funciona para tales números.

¿Alguna solución simple? Se puede hacer tomando entrada como cadena y procesándola. Pero eso no se ve bien.

* EDITAR: Si se conoce la longitud del número, parece ser posible invertir un número con ceros iniciales. (Sin usar cadena) *

Publicaré el código tan pronto como funcione.

EDITAR 2: Intenté volver a colocar los caracteres en el flujo de cin y luego leer y calcular el reverso. Está trabajando para números de 2 dígitos.

Pero si se conoce la longitud, es mucho más fácil encontrar el reverso. Todo lo que necesito hacer es multiplicar por 10 por el número requerido de veces. Así que creo, me gustaría ir con el enfoque de cadena. Esperando que el entrevistador sea feliz 🙂

Los ceros iniciales no están representados por números binarios ( int , double , etc.), por lo que probablemente tendrá que usar std::string . Lea la entrada en la cadena, luego llame a std::reverse() pasando la cadena como entrada.

Sí, debes usar una cuerda. No puede almacenar los ceros iniciales en un int .

Si conoce el ancho total que desea que tenga el número de antemano, puede reutilizar el código que tiene y almacenar los resultados (de derecha a izquierda) en una matriz inicializada de cero. Nota: es probable que desee agregar alguna comprobación de errores al código que se indica a continuación.

 int num, width; cout<<"Enter number "<>num; cout<<"Enter width: "<>width; int rev[width]; for (int i = 0; i < width; ++i) rev[i] = 0; int cnt = width - 1; int rev = 0; int reminder; while(num != 0) { reminder = num % 10; // rev = rev * 10 + reminder; rev[cnt] = remainder; --cnt; num = num / 10; } cout << "Reverse: "; for (int i = 0; i < width; ++i) cout << rev[i]; cout << endl; 

Esto le permitirá manipular el número más fácilmente en el futuro también.

Lee el número en formato de cadena (es decir, usa std :: cadena) e invierte la cadena.

Una vez que convierte su entrada en un entero, lo que hace en la línea 3, se pierde cualquier información sobre los ceros iniciales en la entrada del usuario.

Tendrás que usar una cuerda.

Un enfoque recursivo, pero fácilmente convertido a un bucle …

 #include  int f(int value = 1) { char c; return (std::cin.get(c) && isdigit(c)) ? (c - '0') * value + f(10 * value) : 0; } int main() { std::cout << f() << '\n'; } 

Como dijo ChrisF, necesitas cargar una cadena, porque 4 y 004 es el mismo int y no puedes distinguirlo después de asignarlo a una variable int .

Lo siguiente que debe hacer es recortar la cadena para que contenga solo dígitos (si desea ser correcta) y ejecutar std::reverse en ella, y listo.

Mantenga el número como una cadena y use std::reverse .

 std::string num; std::cout << "Enter number " << std::endl; std::cin >> num; std::string rev(num); std::reverse(rev.begin(), rev.end()); std::cout << "Reverse = " << rev << std::endl; 

Reemplace su bucle while con un bucle for con el mismo número de ejecuciones que desee. El número original tiene dígitos (incluidos los ceros a la izquierda). por ejemplo, 004 requeriría que el bucle se ejecute 3 veces, y que no termine prematuramente una vez x == 0 .

 s = int(raw_input(" enter the no of tyms :")) n = 0 list, list1 = [], [] while n <= s: m = raw_input("enter the number:") n=n+1 list.append(m) print list list.reverse() print list 

Invertir en uno de los mejores lang Python.