求助!0pts

P1303 A*B Problem

Greeper @ 2024-09-22 14:42:05

rt

#include<bits/stdc++.h>
using namespace std;
int a[2050],b[2050],c[4100],la,lb;
string sa,sb;
int mine(int* a,int* b,int *c,int la,int lb)
{
    int lc=la+lb;
    for(int i=0;i<=la;i++)
        for(int j=0;j<lb;j++)
            c[i+j]=a[i]*b[j];
    for(int i=0;i<lc;i++)
    {
        c[i+1]+=c[i]/10;
        c[i]%=10;
        if(i==lc-1)
        {
            if(c[i+1])
            {
                lc++;
            }
        }
    }
    int i=lc-1;
    while(!c[i])
    {
        lc--;
        i--;
    }
    return lc;
}
int main()
{
    cin>>sa>>sb;
    la=sa.size(),lb=sb.size();
    for(int i=la-1;i>=0;i--)
    {
        a[la-i-1]=sa[i]-'0';
    }
    for(int i=lb-1;i>=0;i--)
    {
        b[lb-i-1]=sb[i]-'0';
    }
    int lc=mine(a,b,c,la,lb);
    for(int i=lc-1;i>=0;i--)
    {
        cout<<c[i];
    }
    return 0;
}

by xiexiuqi29 @ 2024-09-22 15:12:59

@Greeper

#include<bits/stdc++.h>
using namespace std;
int a[2050],b[2050],c[4100],la,lb;
string sa,sb;
int mine(int* a,int* b,int *c,int la,int lb)
{
    int lc=la+lb;
    int ld=max(la,lb);
    for(int i=0;i<=ld;i++)
        for(int j=0;j<ld;j++)
            c[i+j]=c[i+j]+a[i]*b[j];//应该加上原来的结果 
    for(int i=0;i<lc;i++)
    {
        c[i+1]+=c[i]/10;
        c[i]%=10;
        if(i==lc-1)
        {
            if(c[i+1])
            {
                lc++;
            }
        }
    }
    int i=lc-1;
    while(!c[i])
    {
        lc--;
        i--;
    }
    return lc;
}
int main()
{
    cin>>sa>>sb;
    la=sa.size(),lb=sb.size();
    for(int i=la-1;i>=0;i--)
    {
        a[la-i-1]=sa[i]-'0';
    }
    for(int i=lb-1;i>=0;i--)
    {
        b[lb-i-1]=sb[i]-'0';
    }
    int lc=mine(a,b,c,la,lb);
    if(sa=="0"||sb=="0")
      cout<<0;//因数为零特判 
    for(int i=lc-1;i>=0;i--)
    {
        cout<<c[i];
    }
    return 0;
}

|