大数相乘,用数组模拟,我调试了好久,,,
//模拟大数相乘 //把两个数存在数组里 #include<stdio.h> #include<string.h> #define maxn 101 char a[50],b[50]; int temp[105][105],ans[105]; int lena,lenb; int cnt=0; int t; void mulit(char c) { int i,j,next=0; i=lena-1; j=t; while(i>=0) { temp[cnt][j]=next+(c-'0')*(a[i]-'0'); if(temp[cnt][j]>=10) { if(i>=1) { next=temp[cnt][j]/10; temp[cnt][j]%=10; } else if(i==0) { temp[cnt][j-1]=temp[cnt][j]/10; temp[cnt][j]%=10; j--; break; } } else next=0; j--; i--; } } void add() { for (int i = maxn;i>=0; i--) { for(int j=0;j<cnt;j++) ans[i]+=temp[j][i]; if(ans[i]>=10) { ans[i-1]+=ans[i]/10; ans[i]%=10; } } } void print() { int i,j; for (i = 0; i <=maxn; ++i) if(ans[i]) break; if(i>maxn) printf("0\n"); else { for(j=i;j<=maxn;j++) printf("%d",ans[j]); printf("\n"); } } int main() { while(~scanf("%s%s",a,b)) { lena=strlen(a); lenb=strlen(b); memset(temp,0,sizeof(temp)); memset(ans,0,sizeof(ans)); cnt=0; t=maxn; for (int i = lenb-1;i>=0 ;i--) { mulit(b[i]); t--; cnt++; } add(); print(); } return 0; }