[C con Clase] Trabajar con números exageradamente grandes.

Facundo Curti facu.curti en gmail.com
Mie Jun 18 01:26:38 CEST 2014


Lo unico que se me ocurre es usar malloc.

int *numero;
int size=256;
numero=malloc(size);

Reservas en memoria 256 bytes, que son apuntados por el puntero
"numero". Que es de tipo int. De todas formas, no estoy seguro de que
funcione. Puesto que el procesador solo puede trabajar de a 32 (4
bytes) ó 64 (8 bytes) bits. Por eso es que un int, en un procesador de
16 bits (telefonos viejos), debería ser de 2 bytes.

El problema en si, es que el procesador no puede trabajar con numeros
tan grandes :P Seguramente te lanzará un buffer overflow, o segv.

La solución, puede ser crear una clase para trabajar con estos
numeros. Algo como lo que mencionaste, solo que yo lo pensaria de esta
forma:

class{
      long long a;
      long long b;
      long long c;
}

Y si el numero fuera 1856887464312, almacenara en a, 18568 y en b,
87464312. Luego puedes sobrecargar los operadores de suma, resta e
igual, para que puedan trabajar con estos números. De esta forma,
evitas hacer tantas operaciones restando el numero máximo que
almacena, etc...

Se puede hacer lo que pides, pero no veo ninguna solución "ideal".
Diria que lo trabajes con clases y sobrecarga de operadores como te
mencioné arriba.

Saludos! ;)

El día 16 de junio de 2014, 3:11, Julio Cesar <ggeatom en gmail.com> escribió:
> Hola a todos, recientemente mientras practicaba y leía el curso de C++ me
> surgieron un par de preguntas. La primera de estas es:
>
> (1) De que manera se podría definir una variable en C++, que pudiera
> almacenar un numero de hasta 100 (o más) digitos y que no sea usando cadenas
> de texto.
>
> Mi segunda pregunta seria la siguiente:
>
> (2) Si definimos la siguiente estructura y consideramos una variable de este
> tipo:
>
> struct STN {
>    long long N1;
>    long long N2;
>    long long N3;
> } Valor;
>
> Cómo se puede hacer para que yo almacene un numero en Valor de la siguiente
> manera:
>
> Supongamos que el numero (llamemos a este número "B") excede el valor maximo
> que puede almacenar una variable de tipo "long long", entonces lo que se
> tiene que hacer es, dado que no se puede almacenar tan solo en N1, guarde en
> N1 el valor máximo posible, despues considaramos el numero que resulta de
> restar a B el valor maximo de una variable long long, este nuevo numero lo
> intentamos almacenar en N2, si no cabe se almacena el valor maximo aceptable
> en N2 y el resto (lo que no se pudo almacenar en N2 se almacena en N3.
>
> A modo de ejemplo consideremos el numero A=9,999,999,999,999,999,999 el cual
> no es almacenable en una variable de tipo long long, entonces N1 contiene el
> mayor elemento a almacenar y SUPONGAMOS que al restar A - N1 nos queda el
> numero 666,666 y este se debe almacenar en N2.
>
> Para esta segunda duda, sospecho que se tiene que hacer con una función, así
> que mi problema esta mas orientado a como puedo yo manipular ese numero tan
> grande y como es que c++ interpreta este numero.
>
> Espero haberme explicado bien, de ante mano quiero agradecerles por la ayuda
> brindada. Qué tengan un buen día.
>
>
> Julio Cesar
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ




Más información sobre la lista de distribución Cconclase