Piense en el almacenamiento de un número como secuencias de dígitos decimales usando una estructura como esta:
struct num {
int ndigits;
char d[MAXDIGITS];
};
Por ejemplo, el número 123 456 se pudo inicializar como
struct num n = { 6, { 6, 5, 4, 3, 2, 1 } };
El orden dígitos invertido resulta ser importante para un cálculo fácil. En particular, el valor de lugar de n.d[i]
es n.d[i]
* 10^i.
Ahora, algunas preguntas:
- ¿Cómo añadir una a una
num
?
- ¿Cómo agregaría un solo dígito arbitrario a
num
?
- ¿Cómo agregaría dos
num
juntos?
- ¿Cómo se multiplicaría un
num
por dos?
- ¿Cómo se multiplicaría un
num
por un solo dígito?
- ¿Cómo se multiplicaría un
num
por 10?
- ¿Cómo se multiplicarían dos
num
juntos? SUGERENCIA: Haga algunas multiplicaciones de lápiz y papel y vea cómo funcionan.
Si resuelve esta secuencia de preguntas, debería poder escribir una función para cada paso, y reutilizar esas funciones para responder a las preguntas posteriores, y terminar con una longitud muy simple y sin optimizar (bien, hasta MAXDIGIT
dígitos) paquete entero para la suma y multiplicación de números positivos.
Otras preguntas:
- ¿Cómo se puede generalizar
num
para representar números negativos, así como positivo?
- ¿Cómo se divide un
num
por otro (ignorando los restos)? Esto es más complicado que la multiplicación, pero de nuevo, comienza haciendo algunas divisiones largas de lápiz y papel y piensa cuidadosamente sobre lo que haces.
http://gmplib.org/ – ziya