¿Cuál es la mejor estructura de datos para almacenar y realizar una adición de dos números grandes de 512 bits?

Si necesita hacer esto por razones prácticas, debe usar una biblioteca de “entero de precisión arbitraria” o “gran número” o “gran número” en el lenguaje en el que se está desarrollando.

En las versiones modernas de Python, esto está integrado para tipos enteros, por lo que puede escribirlo directamente en el intérprete o en un código como:

2 ** 511 + 2 ** 510 => 10055855947456947824680518748654384595609524365444295033292671082791323022555160232601405723625177570767523893639864538140315412108959927459825236756

En Java hay:

BigInteger (Java Platform SE 7)

Reutilizar una biblioteca no solo es más fácil, sino que será dramáticamente menos propenso a errores y probablemente más eficiente que lo que cocinaría usted mismo.

Si está haciendo esto con fines educativos y desea implementarlo usted mismo, considere lo que necesita:

  1. Asumamos que representaremos los números en binario
  2. Entonces necesitamos una forma de almacenar 512 1’s y 0’s
  3. Necesitamos una forma de leer y luego n’th 1 o 0 de cualquier número

La mejor opción aquí depende del idioma, pero una serie de enteros es bastante buena (si es un poco más grande de lo estrictamente necesario).

Sería posible saltar a través de un montón de aros para usar una estructura de datos de tamaño de alrededor de 512 bits para almacenar este número, pero hacerlo será mucho más complejo que solo usar 512 enteros.