Me gustaría implementar una clase BigInt que sea capaz de manejar números realmente grandes. Solo quiero agregar y multiplicar números, sin embargo, la clase también debe manejar números negativos.¿Qué estructura de datos debo usar para la clase BigInt?
Quería representar el número como una cadena, pero hay una gran sobrecarga con la conversión de cadena a int y viceversa para agregar. Deseo implementar la adición como en la escuela secundaria, agregar el orden correspondiente y si el resultado es mayor que 10, agregue el acarreo al siguiente pedido.
Luego pensé que sería mejor manejarlo como una matriz de uns long long int y mantener el signo separado por bool. Con esto tengo miedo del tamaño de la int, ya que el estándar de C++, por lo que sé, garantiza solo que int < float < double. Corrígeme si estoy equivocado. Entonces, cuando llegue a algún número, debo moverme hacia adelante y comenzar a agregar el número a la siguiente posición de la matriz.
¿Hay alguna estructura de datos adecuada o mejor para esto?
Me parece una implementación razonable. Pero si está utilizando ULONG, cada elemento de la matriz puede contener un valor de 0 a 2^32-1 en lugar de 0 a 10. Eso le ahorrará unos pocos bytes. :-) –
El estándar garantiza solo 'float <= double' (tenga en cuenta el signo igual) – ipc
Sí, eso es exactamente lo que quise decir. ¿Pero es 2^32 - 1 lo mismo en Linux y en Solaris? Respectivamente es el tamaño garantizado en todas partes? Mi punto es que, por ejemplo, obtengo MyBigIntClass number = "234567434256547"; , y empiezo a convertir este número de serie a mi representación interna en la clase que se utiliza long long int (quizás :-)), y después de que el número llegue a 2^32 me muevo a otra posición en el conjunto. ¿Es correcto? – user1086004