DESAFÍO: Sumas a lo grande
Este problema tiene una dificultad superior a la habitual en la asignatura y se ofrece como un DESAFÍO a alumnos avanzados. El contenido de la asignatura basta para resolverlo, pero requiere pensar y analizar un poco más de lo que habitualmente se pide en esta.
Este problema se puede enunciar de forma muy sencilla: implementar un programa capaz de sumar dos números naturales.
Sin embargo, vamos a suponer que los números naturales puede tener muchas cifras (hasta 100). Esto sí supone
un problema, pues en las implementaciones habituales de C el mayor tipo entero es el unsigned long long int
(disponible
en C99 y posteriores),
que garantiza, según el estándar, tener una capacidad para representar hasta . En la práctica, esta
es la capacidad máxima que podemos esperar encontrar en los compiladores, muy por debajo de nuestras ambiciones para este
ejercicio.
Tampoco es una opción emplear tipos basados en la representación en coma flotante, pues queremos calcular la suma de forma exacta.
Será necesario, por lo tanto, implementar la lógica de la suma de enteros con nuestra propia representación para los datos. Una posibilidad sencilla es utilizar directamente cadenas de texto y programar el algoritmo de la suma sobre ellas. Computacionalmente no es la mejor forma de hacerlo, pero basta para resolver el problema.
Esta imagen debería traer recuerdos del algoritmo en cuestión...
Recuerde el alma dormida, avive el seso e despierte contemplando cómo se passa la vida - Jorge Manrique.
Entrada
Dos números naturales de hasta 100 cifras.
Salida
El número natural que resulta de su suma, sin ceros a la izquierda.
Ejemplo de entrada 1
2 3
Ejemplo de salida 1
5
Ejemplo de entrada 2
18446744073709551614 1
Ejemplo de salida 2
18446744073709551615
Ejemplo de entrada 3
18446744073709551615 1
Ejemplo de salida 3
18446744073709551616
Ejemplo de entrada 4
1234567891011121314151617181920 3141592653589793238462643383279
Ejemplo de salida 4
4376160544600914552614260565199
Comentarios