海底捞高精(悬关)

P1303 A*B Problem

dongrunxuan @ 2024-01-06 15:03:25

rt,高精乘


#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+10;
int a[maxn],b[maxn],c[maxn];
int operator  * (string q,string w)
{
    int la=q.size(),lb=w.size(),lc=la+lb;
    for(int i=la-1;i>=0;i--)
    {
        a[la-1-i]=q[i]-'0';
    }
    for(int i=lb-1;i>=0;i--)
    {
        b[lb-1-i]=w[i]-'0';
    }
    for(int i=0;i<la;i++)
    {
        for(int j=1;j<lb;j++)
        {
            c[i+j]+=a[i]*b[j];
            c[i+j+1]+=c[i+j]/10;
            c[i+j]%=10;
        }
    }
    while(lc&&c[lc]==0)
    {
        lc--;
    }
    return lc;
}
int main()
{
    string q,w;
    cin>>q>>w;
    int lc=q*w;
    for(int i=lc;i>=0;i--)
    {
        cout<<c[i];
    }
    return 0;
}

by dongrunxuan @ 2024-01-06 15:05:15

数组应开2e3……但还是没过


by M3te0rDream @ 2024-01-06 15:35:34

我的参考代码:

#include<bits/stdc++.h>
using namespace std;
const int N=2005;
int a[N],b[N],c[N*2];
string s,t;
int main(){
    cin>>s>>t;
    int lena=s.size(),lenb=t.size();
    for(int i=0;i<lena;i++)a[lena-i]=s[i]-'0';
    for(int i=0;i<lenb;i++)b[lenb-i]=t[i]-'0';
    int lenc=lena+lenb;
    for(int i=1;i<=lenb;i++)
        for(int j=1;j<=lena;j++)
            c[i+j-1]+=b[i]*a[j];
    for(int i=1;i<=lenc;i++){
        c[i+1]+=c[i]/10;
        c[i]=c[i]%10;
    }
    while(lenc>1&&c[lenc]==0)lenc--;
    for(int i=lenc;i>=1;i--)cout<<c[i];
    return 0;
}

by wch666 @ 2024-01-06 19:35:06

@dongrunxuan 仅供参考

#include<bits/stdc++.h>
using namespace std;
char s1[2005],s2[2005];
int a[2005],b[2005],c[2*2005];
int main()
{
    scanf("%s",s1);
    scanf("%s",s2);
    int lena=strlen(s1);
    int lenb=strlen(s2);
    int lenc=lena+lenb;
    for(int i=0; i<lena; i++)
        a[lena-i-1]=s1[i]-'0';
    for(int i=0; i<lenb; i++)
        b[lenb-i-1]=s2[i]-'0';
    for(int i=0; i<lena; i++)
    {
        int x=0;
        for(int j=0; j<lenb; j++)
        {
            c[i+j]=a[i]*b[j]+x+c[i+j];
            x=c[i+j]/10;
            c[i+j]%=10;
        }
        c[i+lenb]=x;
    }
    while(c[lenc] == 0 && lenc > 0)
        lenc--;
    for(int i=lenc; i>=0; i--)
        cout<<c[i];
    return 0;
}

|