Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: m@o_614 en 20 Febrero 2014, 22:52 pm



Título: numero maximo permitido
Publicado por: m@o_614 en 20 Febrero 2014, 22:52 pm
Saludos

tengo que hacer un programa que me permita ingresarle un numero mayor a 100000000, y busque si el digito x existe en el número y cuantas veces se repite, el numero no debe de ser cadena o char, en el algoritmo ya tengo pensando como hacerlo ya que pues tienes que hacer un busqueda y eso no es la parte dificil, no necesito el codigo. El problema es que me ponen de restriccion que el usuario pueda meter el numero maximo permitido por el sistema o sea hasta que se llene el buffer y que sea a prueba de error, alguna idea de como hacer esto??

gracias


Título: Re: numero maximo permitido
Publicado por: amchacon en 20 Febrero 2014, 23:24 pm
No veo el problema, el scanf te debería permitir hasta el número máximo del sistema.


Título: Re: numero maximo permitido
Publicado por: m@o_614 en 22 Febrero 2014, 02:14 am
Saludos amchacon, el código es el siguiente:

Código
  1. #include <iostream>
  2. #define DIEZ 10
  3.  
  4. using namespace std;
  5.  
  6. int buscarDigito(long int numero,int digito);
  7.  
  8. int main()
  9. {
  10.    long int numero;
  11.    int digito,x;
  12.    cout << "Dame el numero: " << endl;
  13.    cin >> numero;
  14.    cout << "Que digito desea buscar? " << endl;
  15.    cin >> digito;
  16.    x = buscarDigito(numero,digito);
  17.    cout << "\nEl digito " << digito << " se repite " << x << " veces" << endl;
  18.    return 0;
  19. }
  20.  
  21. int buscarDigito(long int numero,int digito)
  22. {
  23.    int residuo,cociente,repetidos = 0;
  24.    for(cociente = numero;cociente != 0;cociente = cociente/10)
  25.    {
  26.        residuo = cociente % 10;
  27.        if(residuo == digito)
  28.           repetidos++;
  29.    }
  30.    return repetidos;
  31. }

y si le pido que le ingrese un numero como: 10040050, el codigo funciona correctamente y me dice, que digito desea buscar, si le digo que 0 me imprime

el digito 0 se repite 5 veces

pero si le ingreso un numero mas grande como: 100019860100890 el programa ya no funciona, ni siquiera me deja que le diga cual digito quiero buscar, una de las restricciones que tengo es que tengo que poder introducir numeros mayores a 100000000 pero el tipo de dato no podra ser char o cadena entonces como lo resuelvo??
gracias


Título: Re: numero maximo permitido
Publicado por: vangodp en 22 Febrero 2014, 03:54 am
En los compiladores actuales creo que el long es lo mismo que int.
En mi ordenador ambos tienen 4 bytes.
prueba con long long int numero;  :rolleyes:

le entra −9,223,372,036,854,775,808 a +9,223,372,036,854,775,807
o
0 a 18,446,744,073,709,551,615

una burrada de numero XDD
de 0 a a mas de 18 trillones.
9223372036854775807 VS
       100019860100890

y si no usas negativos pues:

18,446,744,073,709,551,615
           100,019,860,100,890

Creo que le supera un poquito XD :silbar:

si quieres algo mas largo tomaXD:
http://www.ginac.de/CLN/cln.html
"Personalmente he usado numeros con + de 3000 digitos sin ningún problema."  :o
Fuente:
http://clan-destino42.blogspot.com.es/2011/01/numeros-grandes-en-c.html
¿Lo de arriba se puede hacer? No se es que me suena a coña XD

Mas números que eso solo un agujero negro. jajaj


Título: Re: numero maximo permitido
Publicado por: rir3760 en 22 Febrero 2014, 17:01 pm
En los compiladores actuales creo que el long es lo mismo que int.
No necesariamente. Las únicas dos garantías son: 1) El tipo int es menor o igual al tipo long y 2) El tipo long se compone por al menos 32 bits.

una de las restricciones que tengo es que tengo que poder introducir numeros mayores a 100000000 pero el tipo de dato no podra ser char o cadena entonces como lo resuelvo??
Verificas que el resultado de "cin >> variable" sea true y que el resto de la linea solo consista de espacio blanco. Por ejemplo:
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5.  
  6. #include <cstdio>
  7. // EOF
  8.  
  9. #include <cctype>
  10. using std::isspace;
  11.  
  12. int main()
  13. {
  14.   cout << "Introduce un numero: ";
  15.   long int num;
  16.   bool rv = cin >> num;
  17.  
  18.   int ch;
  19.   while ((ch = cin.get()) != EOF && ch != '\n')
  20.      if (!isspace(ch))
  21.         rv = false;
  22.  
  23.   if (rv)
  24.      cout << "OK (" << num << ")" << endl;
  25.   else
  26.      cout << "Error" << endl;
  27.  
  28.   return 0;
  29. }
Ello te indicara si ocurre un error pero nada mas, para el caso es mejor leer una linea de texto y verificarla con strtol, strtoll, etc. ya que ellas permiten conocer cual fue el error (por ejemplo un numero fuera del rango valido).

Un saludo


Título: Re: numero maximo permitido
Publicado por: vangodp en 22 Febrero 2014, 23:32 pm
¿Y se puede guardar un numero tan largo como el que dijo 3000 dígitos?
Me parece desnecesario ademas de coña XD
¿Para que un numero de 3000 dígitos?Este pavo flipa en colores creo.  :silbar:

Sobre lo de los bits aun tengo que afinar XD
Por que a pesar de saber que a mas bits mas cosas puedes representar, no se muy bien como funciona eso.