大数乘法,注意注释部分:

 1 #include<stdio.h>
 2 
 3 void multiple(char a[],char b[],char c[]){
 4     int temp,in=0,lenA=0,lenB=0,index,start;
 5     while(a[++lenA]!='\0');//求字符数组的最高位,以方便做乘法 ,如果lenA++,则下面对应的不是lenA-1,而是lenA-2 
 6     while(b[++lenB]!='\0');
 7     start = lenA+lenB-1;
 8     for(int i=lenA-1;i>=0;i--){
 9         index=start--;      //做乘法时需要往前移位 
10         for(int j=lenB-1;j>=0;j--){
11 //            printf("a[%d]=%c b[%d]=%c\n",i,a[i],j,b[j]);
12             temp = c[index]-'0'+(a[i]-'0')*(b[j]-'0')+in;
13             c[index--]=temp%10+'0';
14             in = temp/10;
15         }
16         c[index]=in+'0';   //最高位需要保留 
17     }
18 } 
19 
20 int main(){
21     char a[]="123567890";
22     char b[]="123567890";
23     char c[sizeof(a)+sizeof(b)-1]; 
24     for(int i=0;i<sizeof(c);i++)
25         c[i]='0';
26     c[sizeof(c)-1]='\0';
27     multiple(a,b,c);
28     if(c[0]!='0')
29     printf("%c",c[0]);
30     for(int i=1;c[i]!='\0';i++){
31         printf("%c",c[i]);
32     }
33 }