numero maximo permitido

Iniciado por m@o_614, 20 Febrero 2014, 22:52 PM

0 Miembros y 3 Visitantes están viendo este tema.

m@o_614

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

amchacon

No veo el problema, el scanf te debería permitir hasta el número máximo del sistema.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

m@o_614

Saludos amchacon, el código es el siguiente:

#include <iostream>
#define DIEZ 10

using namespace std;

int buscarDigito(long int numero,int digito);

int main()
{
    long int numero;
    int digito,x;
    cout << "Dame el numero: " << endl;
    cin >> numero;
    cout << "Que digito desea buscar? " << endl;
    cin >> digito;
    x = buscarDigito(numero,digito);
    cout << "\nEl digito " << digito << " se repite " << x << " veces" << endl;
    return 0;
}

int buscarDigito(long int numero,int digito)
{
    int residuo,cociente,repetidos = 0;
    for(cociente = numero;cociente != 0;cociente = cociente/10)
    {
        residuo = cociente % 10;
        if(residuo == digito)
           repetidos++;
    }
    return repetidos;
}


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

vangodp

#3
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

rir3760

Cita de: vangodp en 22 Febrero 2014, 03:54 AMEn 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.

Cita de: m@o_614 en 22 Febrero 2014, 02:14 AMuna 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 (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include <cstdio>
// EOF

#include <cctype>
using std::isspace;

int main()
{
   cout << "Introduce un numero: ";
   long int num;
   bool rv = cin >> num;
   
   int ch;
   while ((ch = cin.get()) != EOF && ch != '\n')
      if (!isspace(ch))
         rv = false;
   
   if (rv)
      cout << "OK (" << num << ")" << endl;
   else
      cout << "Error" << endl;
   
   return 0;
}

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

vangodp

#5
¿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.