蒟蒻求助

P1303 A*B Problem

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了谢谢


|