首页 > 代码库 > 大数相乘

大数相乘

 

 

#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 100void GetDigits(int *a,char *s);void multiply(int *a,int *b,int *c);main(){    char s1[N],s2[N];    int i,j,a[N],b[N],c[N*2];    printf("\n input number a: ");    scanf("%s",s1);    printf("\n input number b: ");    scanf("%s",s2);    //把输入的字符串,按位存放到数组     GetDigits(a,s1);    GetDigits(b,s2);    multiply(a,b,c);    //找到最高位    j=N*2-1;    while(c[j]==0)        j--;   //打印计算结果    printf("\n %s * %s=",s1,s2);    for(i=j;i>=0;i--)        printf("%d",c[i]);}/*把字符串形式的数字按位存放到数组*/void GetDigits(int *a, char *s){   int i;   char digit;   int len=strlen(s);   for(i=0;i<N;i++)    *(a+i)=0;   for(i=0;i<len;i++)   {        digit=*(s+i);        *(a+len-1-i) = digit - '0';   }}/*把a*b的结果存储到数组c中,按位表示*/void multiply(int *a,int *b,int *c){     int i,j;      //先把结果数组设置为0zsw     for(i=0;i<N*2;i++)          *(c+i)=0;     for(i=0;i<N;i++)           for(j=0;j<N;j++)                  *(c+i+j)+=*(a+i) * *(b+j);    // 处理进位     for(i=0;i<N*2-1;i++)     {           *(c+i+1)+=*(c+i)/10;      //进位累加到高位           *(c+i)=*(c+i)%10;          //该位的最后结果     }}