实现原理:
两个大数,从末尾开始相乘。相乘结果保存在另外一个数组里面(也从数组末尾开始依次往前保存)。然后将保存位置大于9的数进行进位处理。
因为两位成两位最多也是四位,len3就等于len2+len1;

1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 6 int main() 7 { 8 int i=0,j=0,len1=0,len2=0,len3=0,tem=0,flag=1;//flag标记前几位是否为0,tem标记了len2中每乘完一位向前进一。 9 char strnum1[1000],strnum2[1000],strnum3[2000]; 10 int num[1000]={0}; 11 12 //gets(strnum1); 13 scanf("%s%s",strnum1,strnum2); 14 //gets(strnum2); 15 16 len1=strlen(strnum1); 17 len2=strlen(strnum2); 18 len3=len1+len2; 19 tem=len3; 20 21 //相乘 22 for(i=len2-1;i>=0;i--) //从第二个数的最后一位开始计算(从后往前)。 23 { 24 tem=--len3; //计算完一位,结果数组向前进一位。 25 for(j=len1-1;j>=0;j--) 26 { 27 num[tem--]+=(strnum2[i]-'0')*(strnum1[j]-'0'); 28 } 29 } 30 31 //进位 32 len3=len1+len2; 33 34 for(i=len3-1;i>=0;i--) 35 { 36 while(num[i]>9) 37 { 38 num[i-1]+=num[i]/10; 39 num[i]=num[i]%10; 40 } 41 } 42 if(strcmp(strnum1,"0")==0||strcmp(strnum2,"0")==0) 43 { 44 printf("0"); 45 } 46 else 47 { 48 for(i=0;i<len3;i++) 49 { 50 if(num[i]==0&&flag==1) 51 continue; 52 else 53 flag=0; 54 printf("%d",num[i]); 55 } 56 } 57 58 printf(" "); 59 }