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

José de Paz cplusplus en intelnet.net.gt
Mie Jun 18 16:06:59 CEST 2014


Hola buen día,

De pronto está librería te puede ayudar:

https://gmplib.org/


 
__________________________
           José de Paz
 
@_jdepaz
 
http://unixescuintla.blogspot.com
 
De Guatemala en Medellín
Technical Architect en Tata Consultancy Services

<-----Mensaje original----->

 	 	From: Facundo Curti [facu.curti en gmail.com]
Sent: 17/6/2014 6:26:38 PM
To: cconclase en listas.conclase.net
Subject: Re: [C con Clase]Trabajar con números exageradamente grandes. 

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.ne
t 
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ 

_______________________________________________ 
Lista de correo Cconclase Cconclase en listas.conclase.net 
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.ne
t 
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ 
. 
	
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140618/2eef1c50/attachment.html>


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