最后两个点TIE,蒟蒻求助

P1303 A*B Problem

Myosotis_alpestris @ 2022-04-03 10:56:19

RT,感觉写的很怪

开O2之后最后两个点不是TIE而是RE

而且第一个点也会WA

可能是因为第一个点用的特判

蹲一个大佬帮调

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string a,b;
    int c1[100],c2[100],c3[100]={0};
    int len1,len2,lenc;
    cin>>a>>b;
    len1=a.length();
    len2=b.length();
    if((len1==1&&c1[0]==0)||(len2==1&c2[0]==0))//因为会产生大量的前导0,所以当单个乘数是0的时候须特判 
    {
        cout<<"0"<<endl;
        return 0;
    }
    if (len1<len2)//补0,如果没有这一项第五个点会RE 
    {
        for(int i=1;i<=len2-len1;i++)
        {
            a="0"+a;
        }
    }
    else
    {
        for(int i=1;i<=len1-len2;i++)
        {
            b="0"+b;
        }
    }
    len1=a.length();
    len2=b.length();
    for(int x=0;x<=len1-1;x++)//将字符串转为数组 
    {
        c1[len1-x]=a[x]-'0';
    }
    for(int y=0;y<=len2-1;y++)
    {
        c2[len2-y]=b[y]-'0';
    }
    int qaq=1;
    int awa=2;
    for(int i=1;i<=len2;i++)
    {
        for (int j=1;j<=len2;j++)
        {
            int x=c1[j]*c2[i];
            if(c3[qaq]==0)//如果这一位是0,那它的位数+1 
            {
                lenc++;
            }
            c3[qaq]+=x;
            if(c3[qaq]>=10)//将>=10的部分移到上一位 
            {
                if(c3[qaq+1]==0)
                {
                    lenc++;
                }
                c3[qaq+1]+=c3[qaq]/10;
                c3[qaq]%=10;
            }
            qaq++;
        }
        qaq=awa;//awa代表前移的位数 
        awa++;
    }
    while(c3[lenc]==0)//去掉多余的前导0 
    {
        lenc--;
    }
    for (int i=lenc;i>0;i--)
    {
        cout<<c3[i];
    }
}

by zyq1234 @ 2022-04-21 10:24:46

我也是这个问题,我把 int c1[100],c2[100],c3[100]={0}; 数组改大了,改成了5010。就成功了!


|