Dividir el número grande A por la programación en lenguaje B C
#include lt;stdio.hgt;
#define MAXINT 1000
int compare(int a[], int b[]);
int bigplus(int a[], int b[], int c[]);
int bigsub(int a[], int b[], int c[]);
int bigmult(int a[], int unsigned b, int c[]
int bigmult2(int a[], int b[], int c[]);
int bigdiv(int a[], unsigned int b, int c[], int *d
int bigdiv2(int a[], int b[], int); c[], int d[]);
int main(int argc, char *argv[])
{
int a[MAXINT]= {10, 5, 4, 6, 5, 4, 3, 2, 1, 1, 1}; //Multiplicando o dividendo
int b[MAXINT]={7, 7, 6 , 5 , 4, 3, 2, 1}; //Multiplicador o divisor
int c[MAXINT], d[MAXINT] //c[] almacena el cociente, d[] almacena el resto< / p>
int div=1234; //Pequeño multiplicador o divisor pequeño
int k=0;
int *res=amp;k; //Pequeño puntero entero restante
bigplus(a, b, c);
bigsub(a, b, c
bigmult(a, div, c); p>
bigmult2(a, b, c);
bigdiv(a, div, c, res
bigdiv2(a, b, c, d);
getchar();
devuelve 0
}
int comparar(int a[], int b[] ) / /Comparar el tamaño de números enteros grandes
{
int i;
if (a[0]gt; b[0]) return 1; Compare los dígitos de a y b para determinar el valor de retorno
else if (a[0]lt; b[0]) return -1;
else //Cuando los dígitos son iguales Comparación
{
i=a[0];
while (a[i]==b[i]) //bit-by comparación de bits
i--;
si (i==0) devuelve 0
si no (
a[i]gt; b[i]) devuelve 1;
de lo contrario devuelve
}
}
int; bigplus(int a[], int b[], int c[]) //Suma de enteros grandes
{
int i, len;
len =(a[0]gt;b[0]?a[0]:b[0]); //a[0] b[0] guarda la longitud de la matriz, len es la más larga
for(i=0; ilt; MAXINT; i) //Borrar la matriz a 0
c[i]=0
for (i=1; ilt; = len ;i) //Calcula el valor de cada bit
{
c[i] =(a[i] b[i]);
if (c[i]gt;=10)
{
c[i]-=10 //Si es mayor que 10, toma el dígito de las unidades
c[ i 1]; //Agrega 1 al bit alto
}
}
if (c[i 1]gt; 0) len;
c[0]=len; //c[0] guarda la longitud real de la matriz de resultados
printf("Los enteros grandes suman: "; p>
for (i=len; igt ;=1;i--)
printf("d",c[i]); //Imprimir resultados
printf("\n";
devuelve 0;
}
int bigsub(int a[], int b[], int c[]) //Resta de enteros grandes
{
int i, len
len=(a[0]gt; b[0]?a[0] :b[0]); //a[0 ]Guarda la longitud del número, len es el más largo
for(i=0; ilt; MAXINT; i) //Borrar la matriz para 0
c[i]=0;
if (compare(a, b)==0) //Compara los tamaños de a y b
{
printf("Resultado: 0";
devuelve 0;
}
else if (comparar(a, b) gt; 0)
for (i=1; ilt;=len;i) //Calcular el valor de cada bit
{
c[i ] =(a[i]-b[i]);
si (c[i]lt; 0)
{
c[i] =10; //Si es menor que 0, suma 10 a la posición original <
/p>
c[i 1]--; //Disminuye el bit alto en 1
}
}
else
for (i=1;ilt;=len;i) //Calcular el valor de cada bit
{
c[i] =(b[i]- a[i ]);
if (c[i]lt; 0)
{
c[i] =10; 0, agregue 10 en su lugar
c[i 1]--; //Disminuya el bit alto en 1
}
}
while (lengt; 1 amp; amp; c[len]==0) //Elimina el bit alto 0
len--
c[0]=len; ;
printf( "Enteros grandes sub= ";
if (a[0]lt; b[0]) printf("-";
for(i=len; igt;=1 ;i--) //Imprimir resultados
printf("d", c[i]);
printf("\n); ";
return 0;
}
int bigmult(int a[], unsigned int b, int c[])//Alta precisión multiplicada por baja precisión
{
int len, i;
for (i=0; ilt; MAXINT; i) //Borrar la matriz a 0 p>
c[i]=0;
len=a[0];
for(i=1;ilt;=len;i) //Calcular para cada bit
{
c[i] =a[i]*b;
c[i 1] =c[i]/10;
c[i]= 10;
}
while (c[len]gt;=10) //Procesa los bits altos
{
c[len 1]=c[len]/10;
c[len]=10;
}
if (c[len]==0) len --; //Maneja el caso en el que el bit de acarreo alto es 0
printf("Integer grande y multipequeño: ";
for (i=len; igt; =1; i-- )
printf("d", c[i]);
printf("\n");
}
int bigmult2
(int a[], int b[], int c[]) //Alta precisión multiplicada por alta precisión
{
int i, j, len;
for (i=0; ilt; MAXINT; i) //Borrar la matriz a 0
c[i]=0
for (i=1; ilt; ; = a[0];i) //Bucle multiplicando
for (j=1;jlt;=b[0];j) //Bucle multiplicador
{< / p>
c[i j-1] =a[i]*b[j]; //Calcula y acumula cada bit
c[i j] =c[i j-1 ]/ 10; //Suma cada resultado al dígito superior
c[i j-1]=10; //Calcula el dígito de las unidades cada vez
} p>
len=a[0] b[0]; //Toma la longitud máxima
while (lengt; 1 amp; amp; c[len]==0) //Elimina el bit alto 0
len--;
c[0]=len;
printf("Enteros grandes multi: ";
for ( i =len;igt;=1;i--) //Imprimir resultados
printf("d", c[i]);
printf("\n";
}
int bigdiv(int a[], unsigned int b, int c[], int *d) //Alta precisión dividida por baja precisión
{ //a[] es el multiplicando, b es el divisor, c[] es el resultado, d es el resto
int i, len
len=a[0; ] ; //len es la longitud de la matriz de a[0]
for (i=len; igt; =1; i--)
{
( *d)=10*(*d) a[i]; //Calcular el resto de cada paso
c[i]=(*d)/b; cada paso
(*d)=(*d)b; //Encontrar el resto del módulo
}
while (lengt; 1 amp; amp; c[len]==0 ) len--; //Ir al bit alto 0
p
rintf("Entero grande div entero pequeño: ";
for (i=len; igt; =1; i--) //Imprimir resultados
printf("d", c[i]);
printf("\tCumplido aritmético: d", *d
printf("\n";
}<); /p>
int bigdiv2(int a[], int b[], int c[], int d[]) //Alta precisión dividida por alta precisión
{
int i, j, len;
if (compare(a, b)lt; 0) //El dividendo es menor y el resultado se imprime directamente
{ p>
printf("Resultado: 0";
printf("Complemento aritmético: ";
for (i=a[0]; igt; = 1; i --) printf ("d", a[i]);
printf("\n";
retorno -1;
} p>
for (i=0; ilt; MAXINT; i) //Borrar el cociente y el resto a 0
{
c[i]=0; p>
d [i]=0;
}
len=a[0]; d[0]=0; i=len; igt; =1; i--) //División bit a bit
{
para (j=d[0]; jgt; =1; j--)
d[j 1]=d[j];
d[1]=a[i]; // Bit alto*10 para todos
d [0]; // La longitud de la matriz d aumenta en 1
while (compare(d, b)gt; =0) //Compara los tamaños de d y b
{
for (j =1;jlt;=d[0];j) //Hacer resta d-b
{
d[j]-= b[j];
if (d[j]lt; 0)
{
d[j] =10; > d[j 1]--;
p>}
}
mientras
(jgt; 0 amp; amp; d[j]==0) //Elimina el bit alto 0
j--
d[0]=j ; p>
c[i]; //Agregue 1 al valor de ubicación del negocio
}
}
j=b[0];
while (c[j]==0 amp; amp; jgt; 0) j-- //Encuentra la longitud de la matriz de cocientes c
c[0]=j ;
printf("Resultado del div entero grande: ";
for (i=c[0]; igt; =1; i--) //Impresora
printf( "d", c[i]);
printf("\tComplemento aritmético: "; //Imprime el resto
for (i=d[0 ]; igt;=1 ;i--)
printf("d",d[i]);
printf("\n");
}