大数乘法
#include<stdio.h> #include<string.h> int main() { int i,j,k,l,m1,m2,c,flag; int s1[1002],s2[1002],s3[2004]; //s1[],s2[]表示2乘数,s3[]表示结果 char line1[1002],line2[1002]; //用字符串保存数字 while(scanf("%s%s",line1,line2)!=EOF) { for(i=l=strlen(line1)-1;i>=0;i--) s1[i]=line1[l-i]-'0'; for(i=l=strlen(line2)-1;i>=0;i--) s2[i]=line2[l-i]-'0'; //将字符数组长的整数数组,注意要反过来 j=strlen(line1)+strlen(line2); //乘积的长度是两个乘数长度的和 for(i=0;i<2001;i++) s3[i]=0; //结果初始化,为乘法做准备 m1=strlen(line1); m2=strlen(line2); for(i=0;i<m1;i++) for(k=0;k<m2;k++) s3[i+k]+=s1[i]*s2[k];//逐位相乘,结果加到对应位 for(i=0,c=0;i<2001;i++) { k=s3[i]+c; s3[i]=k%10; c=k/10; //处理进位 } flag=0; for(i=2000;i>=0;i--) { if(flag||s3[i]) { printf("%d",s3[i]); flag=1; } } if(!flag) printf("0"); putchar('\n'); } return 0; }