大数相乘,用数组模拟,我调试了好久,,,
//模拟大数相乘
//把两个数存在数组里
#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;
}
大数其实不难,这是一定要掌握的