Como una asignación opcional, estoy pensando en escribir mi propia implementación de la clase BigInteger, donde voy a dar mis propios métodos para la suma, resta, multiplicación, etc.¿Qué estructura de datos debería usar para crear mi propia clase "BigInteger"?
Esto será para los números enteros arbitrariamente largas, incluso cientos de dígitos de largo.
Al hacer los cálculos en estos números, dígito por dígito no es difícil, ¿cuál cree que es la mejor estructura de datos para representar mi "BigInteger"?
Al principio estaba considerando usar una matriz, pero luego pensé que todavía podría desbordarme (quedarme sin ranuras de la matriz) después de una gran adición o multiplicación. ¿Sería este un buen caso para usar una lista vinculada, ya que puedo agregar dígitos con O (1) complejidad de tiempo?
¿Hay alguna otra estructura de datos que sería incluso más adecuada que una lista vinculada? ¿Debería el tipo de mi estructura de datos ser el tipo entero posible más pequeño que tengo disponible?
Además, ¿debo tener cuidado acerca de cómo almacenar mi variable "carry"? ¿Debería ser él mismo de mi tipo "BigInteger"?
(a) No creo que deba usar una lista vinculada, estoy seguro de que algunas operaciones requerirán (o se beneficiarán de) acceso aleatorio.Además, las listas vinculadas son lentas con todas las asignaciones de memoria. (b) Si usa el entero más pequeño, usará la memoria más baja, pero si usa lo que coincida con el tamaño de una palabra (es decir, un 'int'), será rápido. Entonces depende de cuál es tu principal preocupación. Una posibilidad obvia es hacer que el entero escriba un parámetro de plantilla de su clase. (c) Compruebe la biblioteca de GNU MP, no se equivocará si copia algunas de sus decisiones de diseño. – Manuel
Aquí está el código fuente de la clase BigInteger de Java: http://kickjava.com/src/java/math/BigInteger.java.htm – Manuel