80分求助

P1303 A*B Problem

aSamyy @ 2024-11-17 15:50:31

#include <bits/stdc++.h>
using namespace std;
int a[100005],b[100005],c[100005];
string s1,s2;
int la,lb,lc;
void zh(string s,int a[],int &l)
{
    reverse(s.begin(),s.end());
    int cmp=0,k=1;
    for(int i=0; i<s.size(); i++)
    {
        cmp=cmp+(s[i]-'0')*k;
        k=k*10;
        if(k==10000)
        {
            k=1;
            a[++l]=cmp;
            cmp=0;
        }
    }
    if(cmp!=0) a[++l]=cmp;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>s1>>s2;
    zh(s1,a,la);
    zh(s2,b,lb);
    lc=la+lb;
    int jw=0;
    for(int i=1; i<=la; i++)
    {
        for(int j=1; j<=lb; j++)
        {
            int k=i+j-1;
            c[k]+=a[i]*b[j];
            jw=c[k]/10000;
            c[k]=c[k]%10000;
            while(jw)
            {
                k++;
                c[k]+=jw%10000;
                jw/=10000;
            }
            lc=max(lc,k);
        }
    }
    while(c[lc]==0&&lc>1) lc--;
    cout<<c[lc];
    for(int i=lc-1; i>=1; i--)
    {
        if(c[i]<1000) cout<<0;
        if(c[i]<100) cout<<0;
        if(c[i]<10) cout<<0;
        cout<<c[i];
    }
    return 0;
}

by WLOG404 @ 2024-12-06 23:26:16

第一个点没过吗,把输入数据开头的0处理掉


|