Tengo una duda con un programa que hice en C

Iniciado por maic1020, 10 Noviembre 2016, 23:57 PM

0 Miembros y 1 Visitante están viendo este tema.

maic1020

Este es el enunciado del ejercicio:

Escribe un programa que dado un número entero positivo, indique si
contiene una secuencia apocalíptica. Un número contiene una secuencia
apocalíptica si tiene al menos tres veces seguidas la cifra 6.
Por ejemplo: 666, 46 663, 23666997.

y este es el programa que hice:

#include <stdio.h>
int main(){
int n,cont=0,r;
printf("Escribe un numero: "); scanf("%d",&n);
while(n>0 && cont<3){
   if(n%10==6){ // si el numero divido 10 da como residuo 6
       n=n/10;      // calculo el cociente
       if(n%10==6){ // el numero adopta el valor del cociente
           n=n/10; // realizo lo mismo que el anterio (cociente)
           r=n%10; // calculo el reciduo
           if(n%10==6 || r==6 ){ se han de cumplir uno de las dos condiciones
               cont+=3;// constante  que almacena un 3, es decir, almacena tres veces              seguidas el numero 6
           }
       }
   }

     if(n%10!=6){
        n=n/10;
     }
}
if(cont>=3)
  printf("El numero es apocaliptico\n");
else
  printf("El numero no es apocaliptico\n");

return 0;}

todo iba bien, me reconocia lo que pedia, lo malo es cuando ingreso una cantidad elevada de numeros, por ejemplo "6669850943 o 666666666", me gustaria que me dijierais alguna solucion, os lo agradeceria.



Mod: Los códigos deben ir en etiquetas GeSHi, no se debe escribir en mayúsculas

Poyoncio

Curso de ensamblador desde cero

andie13

Si no me equivoco las variables int solo captan hasta un máximo de 2.147.483.647 numeros en 32 bits.
He probado y cuando pones un numero infimamente menos que ese máximo, el programa funciona.
Escribe un numero: 2146662132
El numero es apocaliptico

Es a partir de ahí cuando empieza a fallar.
Escribe un numero: 2147666548
El numero no es apocaliptico

Prueba cambiando la variable int por otra que soporte mayor cantidad de caracteres, como float.

MAFUS

Usa unsigned, long int, long unsigned, long long int, long ling unsigned.

engel lex

#4
Cita de: andie13 en 11 Noviembre 2016, 01:03 AM
Si no me equivoco las variables int solo captan hasta un máximo de 2.147.483.647 numeros en 32 bits.
He probado y cuando pones un numero infimamente menos que ese máximo, el programa funciona.
Escribe un numero: 2146662132
El numero es apocaliptico

Es a partir de ahí cuando empieza a fallar.
Escribe un numero: 2147666548
El numero no es apocaliptico

Prueba cambiando la variable int por otra que soporte mayor cantidad de caracteres, como float.

float es 32bits... puedes incluso guardar menos(por el calculo de la parte decimal)... lo unico que hace es mover el espacio decimal para "ajustar la precisión"

recomiendo estudiar los detalles
https://en.wikipedia.org/wiki/Single-precision_floating-point_format

y dejo la aclaratoria
CitarAs an example, the 32-bit integer 2,147,483,647 converts to 2,147,483,650 in IEEE 754 form.


en tal caso si te fijas el 2.147..... es 31 bits... el 32 es el signo, por lo que si usas (como indica MAFUS) unsigned int, llegarás hasta 4.294...

si usas unsigned long int, tendrás un espacio de 64 bits, que es un numero mucho más grande (18.446.744.073.709.551.616), igual limitado para "rellenar", de ahí en adelante no puedes acceder a numero de mayor precisión sin librerías especiales
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.