[ Foro de C++ ]

Detener el programa cuando el número empieza por cero

09-Dec-2019 16:57
Invitado (yaicorc)
1 Respuestas

Hola... Estoy haciendo un programa  que mediante una notación posicional ACM represente números enteros.
Por ejemplo, 719 es equivalente a 53 en notación decimal, ¡ya que 7 * 3! + 1 * 2! + 9 * 1! = 53.
Cada caso de prueba se da en una sola línea que contiene una cadena no vacía de como máximo 5 dígitos, que representa un número en notación ACM. La cadena no puede tener ceros a la izquierda. El último caso de prueba es seguido por una línea que contiene un cero.
Lo único es que no se como hacer para que cuando tenga un cero a la izquierda se detenga el programa, Este es mi programa:

#include <iostream>
using namespace std;
bool p;
int ContarCifras(int Numero)
{
int Cifras=0;
while(Numero>=1)
{
Numero=Numero/10;
Cifras++;
}
return Cifras;
}

int factorial(int n)
{
long long f=1;
for(int i=n;i>=1;i--)
f=f*i;
return f;
}

int main()
{
int Numero, Cifras, Contador, Resto, Arreglo[6], Sum=0;
while(!p)
{
cin>>Numero;
if(Numero==0 || Numero==)
   break;
else
{
   Cifras=ContarCifras(Numero);
   if (Cifras<6)
   {
   for(Contador=0;Contador<Cifras;Contador++)
   {
   Resto=Numero%10;
   Numero=Numero/10;
   
    Arreglo[Contador]=Resto;
   
   
cout<<Numero<<endl;
   }
   for(Contador=0;Contador<Cifras;Contador++)
   {
   int fact=factorial(Contador+1);
    //cout<<Arreglo[Contador]<<endl;
Sum+=Arreglo[Contador]*fact;

}
   }
   else
   return 0;
   }
cout<<Sum<<endl;
Sum=0;
   }

return 0;
}


29-Dec-2019 21:41
Jorge d r (+1)

Cuando utilizas cin guardando un número, todos los ceros que haya delante implícitamente los elimina dejando el número sin los ceros delante.
O sea:
si introduces 0098, cin se encarga de guardar el número en la variable como 98.
Una opción sería obtener el número como caracteres en vez de int, comprobar que no empiece por 0 y luego convertir la cadena a número.
Otro fallo que he visto es que no has inicializado el boleano 'p' por lo tanto entras en bucle infinito en el while así que deberías de darle el valor false tal y como tienes montado el while.
Te dejo el trozo de código en cuestión para que lo revises y lo agregues a tu código.
             while (p)
{
char num[20];
cin.getline(num,20);
cout << "el numero es " << num << endl;
Numero = atoi(num);
if (num[0] == '0') {
p = true;
break;
}
........

Saludos






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)