20分求调!!

P1303 A*B Problem

uua___ @ 2024-05-15 17:15:52

#include<bits/stdc++.h>
using namespace std;
int  a[1000000],b[1000000],c[1000000];
string x,y;
int la,lb,lc;
int main()
{
    cin>>x>>y;
    la=x.size();
    lb=y.size();
    for(int i=0;i<la;i++)
    {
        a[la-i]=x[i]-'0';
    }
    for(int i=0;i<lb;i++)
    {
        b[lb-i]=y[i]-'0';
    }
//  lc=max(la,lb);
for(int i=1;i<=la;i++)
{

    for(int j=1;j<=lb;j++)
    {
        c[i+j-1]+=a[j]*b[i];
    }
        }

        for(int i=1;i<=lb+la;i++)
        {
            if(c[i]>9)
            {
            c[i+1]=c[i]/10;
        c[i]=c[i]%10;
            }

        }
        int lc=la+lb;

while(c[lc]==0&&lc>1) lc--;
//  if(c[la+lb+1]>0) lc++;
    for(int i=lc;i>=1;i--)
    {
        cout<<c[i];
    }

    return 0;
}

by biantwin @ 2024-05-15 17:37:48

你转换的时候是存的数组第零位,而相乘的时候是从数组的第一位开始乘的,将前两个for循环改一下,或者改一下第三个for循环就行了


by shengzhaoteng1118 @ 2024-06-05 17:32:05

#include<bits/stdc++.h>
using namespace std;
int a[10001],b[10001],c[10001],la,lb,lc;char s[10001];bool d,d2;
int main(){
    scanf("%s",s);
    d=s[0]=='-';
    for(la=1;la<=strlen(s)-d;la++){
        a[la]=s[strlen(s)-la]-'0';
    }
    scanf("%s",s);
    d2=s[0]=='-';
    for(lb=1;lb<=strlen(s)-d2;lb++){
        b[lb]=s[strlen(s)-lb]-'0';
    }
    if((d||d2)&&(!(d&&d2))){
        cout<<'-';
    }
    lc=la+lb+1;
    for(int i=1;i<=la;i++){
        for(int j=1;j<=lb;j++){
            c[i+j-1]+=a[i]*b[j];
            c[i+j]+=c[i+j-1]/10;
            c[i+j-1]%=10;
        }
    }
    while(c[lc]==0&&lc>1){
        lc--;
    }
    for(int i=lc;i>=1;i--){
        cout<<c[i];
    }
    return 0;
}

|