Red de conocimiento informático - Material del sitio web - Dividir el número grande A por la programación en lenguaje B C

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: ";

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

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

}

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

{

printf("Resultado: 0";

printf("Complemento aritmético: ";

for (i=a[0]; igt; = 1; i --) printf ("d", a[i]);

printf("\n";

retorno -1;

}

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

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");

}