elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Tengo una duda con un programa que hice en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Tengo una duda con un programa que hice en C  (Leído 3,392 veces)
maic1020

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Tengo una duda con un programa que hice en C
« en: 10 Noviembre 2016, 23:57 pm »

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:

Código
  1. #include <stdio.h>
  2. int main(){
  3. int n,cont=0,r;
  4. printf("Escribe un numero: "); scanf("%d",&n);
  5. while(n>0 && cont<3){
  6.    if(n%10==6){ // si el numero divido 10 da como residuo 6
  7.        n=n/10;      // calculo el cociente
  8.        if(n%10==6){ // el numero adopta el valor del cociente
  9.            n=n/10; // realizo lo mismo que el anterio (cociente)
  10.            r=n%10; // calculo el reciduo
  11.            if(n%10==6 || r==6 ){ se han de cumplir uno de las dos condiciones
  12.                cont+=3;// constante  que almacena un 3, es decir, almacena tres veces              seguidas el numero 6
  13.            }
  14.        }
  15.    }
  16.  
  17.      if(n%10!=6){
  18.         n=n/10;
  19.      }
  20. }
  21. if(cont>=3)
  22.   printf("El numero es apocaliptico\n");
  23. else
  24.   printf("El numero no es apocaliptico\n");
  25.  
  26. return 0;}
  27.  
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


« Última modificación: 11 Noviembre 2016, 07:05 am por engel lex » En línea

Poyoncio

Desconectado Desconectado

Mensajes: 220



Ver Perfil WWW
Re: Tengo una duda con un programa que hice en C
« Respuesta #1 en: 11 Noviembre 2016, 00:57 am »

Declara con float, en vez de con int


En línea

Curso de ensamblador desde cero
andie13

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Re: Tengo una duda con un programa que hice en C
« Respuesta #2 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.
Código
  1. Escribe un numero: 2146662132
  2. El numero es apocaliptico
Es a partir de ahí cuando empieza a fallar.
Código
  1. Escribe un numero: 2147666548
  2. El numero no es apocaliptico
Prueba cambiando la variable int por otra que soporte mayor cantidad de caracteres, como float.
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Tengo una duda con un programa que hice en C
« Respuesta #3 en: 11 Noviembre 2016, 07:02 am »

Usa unsigned, long int, long unsigned, long long int, long ling unsigned.
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Tengo una duda con un programa que hice en C
« Respuesta #4 en: 11 Noviembre 2016, 07:18 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.
Código
  1. Escribe un numero: 2146662132
  2. El numero es apocaliptico
Es a partir de ahí cuando empieza a fallar.
Código
  1. Escribe un numero: 2147666548
  2. 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
Citar
As 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
« Última modificación: 11 Noviembre 2016, 07:22 am por engel lex » En línea

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.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines