En la cabecera van unas breves instruciones:
/*BIBLIOTECA PARA OPERAR CON GRANDES NÚMEROS
INSTRUCCIONES:
En la posicion 0 del array se guarda su dimension.
Las cifras de indice menor, son las menos significativas. Ejemplo
A=002381;
A[0]=6; Dimesion
A[1]=0;
A[2]=0;
A[3]=2;
A[4]=3;
A[5]=8;
A[6]=1;
Los datos con los que se opera deben tener la misma longitud, es decir
A[0]=B[0]
*/
void multiplica(int A[], int B[], int C[]);
void suma(int A[], int B[], int C[]);
void Imprimir(int A[]);
void Leer(int A[]);
void multiplica(int A[], int B[], int C[])
{
/*En C es donde se almacena la solucion*/
int cont1,cont2,acarreo,aux,aux2;
C[0]=A[0];
for (cont1=A[0];cont1>=1;cont1--) C[cont1]=0;
aux=0;
for (cont1=A[0];cont1>=1;cont1--)
{
acarreo=0;
for (cont2=A[0];cont2>=1;cont2--)
{
if ((cont2-aux)>0)
{
aux2=(C[cont2-aux]+A[cont1]*B[cont2]+acarreo)%10;
acarreo=(C[cont2-aux]+A[cont1]*B[cont2]+acarreo)/10;
C[cont2-aux]=aux2;
}
}
aux++;
}
}
void suma(int A[], int B[], int C[])
{
/*En C es donde se almacena la solucion*/
int cont,acarreo;
C[0]=A[0];
for (cont=A[0];cont>=1;cont--) C[cont]=0;
acarreo=0;
for (cont=A[0];cont>=1;cont--)
{
C[cont]=(A[cont]+B[cont]+acarreo)%10;
acarreo=(A[cont]+B[cont]+acarreo)/10;
}
}
void Imprimir(int A[])
{
int cont;
for(cont=1;cont<=A[0];cont++) printf("%i",A[cont]);
}
void Leer(int A[], int Tam)
{
int cont,aux;
char c;
A[0]=Tam;
printf("Escriba el numero: ");/*Se puede quitar*/
cont=0;
scanf("%c",&c);
while (c!='\n')
{
cont++;
A[cont]=c-'0';
scanf("%c",&c);
}
aux=cont;
for (cont=1;cont<=aux;cont++)/* printf("%i",A[cont]); printf("\n");*/
for (cont=0;cont<aux;cont++)
{
A[Tam-cont]=A[aux-cont];
A[aux-cont]=0;
}
}
También les dejo una calculadora que usa ambas funciones mostrando la suma y la multiplicación: (cabe resaltar la necesidad de llamar a la biblioteca)
#include <stdio.h>
#include <grandes.h>
const int max=50;
int m[max+1],n[max+1],x[max+1];
int main(void)
{
Leer(m,max);
Leer(n,max);
suma(m,n,x);
printf("\n\nLa suma vale: "); Imprimir(x);
multiplica(m,n,x);
printf("\n\nLa multiplicacion vale: "); Imprimir(x);
scanf("%i");
return 0;
}
Por si lo necesitan, aquí les dejo el post donde se explica cómo se crean y se guardan las bibliotecas en C:
http://cypascal.blogspot.com.es/2012/11/crea-tu-propia-biblioteca-en-cc.html
Un saludo.
No hay comentarios:
Publicar un comentario