xrk2006 @ 2020-12-21 16:21:52
写WA两个点,麻烦帮忙看下哪错了?
#include<iostream>
#include<cstring>
using namespace std;
int ans[20005];
struct p
{
int x,y;
}a[20005],b[20005];
int main()
{
string s,c;
cin>>s>>c;
int n=0,m=0;
for(int i=0;i<s.size();i++)a[++n].x=s[i]-'0';
for(int i=0;i<c.size();i++)b[++m].x=c[i]-'0';
for(int i=1;i<=n;i++)a[i].y=a[n-i+1].x;
for(int i=1;i<=m;i++)b[i].y=b[n-i+1].x;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
ans[i+j-1]+=a[i].y*b[j].y;
if(ans[i+j-1]>=10)
{
ans[i+j]+=ans[i+j-1]/10;
ans[i+j-1]%=10;
}
}
}
int k=m+n;
bool f=false;
for(int i=k;i>=1;i--)
{
if(ans[i]==0&&f==false) continue;
if(f==false) f=true;
cout<<ans[i];
}
if(f==false) cout<<0;
return 0;
}
by w23c3c3 @ 2020-12-21 16:25:58
@向日葵Reta 在ans[i+j]+=ans[i+j-1]/10;
中也可能会发生进位,所以建议在乘法的时候不处理进位,最后统一处理
by xrk2006 @ 2020-12-21 16:31:13
@w23c3c3 哦对谢谢,我试试
by w23c3c3 @ 2020-12-21 16:35:49
@向日葵Reta 哦还有b[i].y
处理的时候应该是b[m-i+1].x
by xrk2006 @ 2020-12-21 16:43:44
@w23c3c3 哦哦
by xrk2006 @ 2020-12-21 16:48:46
@w23c3c3 A了谢谢