2WA求助

P1303 A*B Problem

Kobe_Bryan @ 2024-04-16 16:57:38

最后两个 WA 求助

/*
1.将高精度的s1,逆序存入整数数组a
2.将a数组的每一位,逐位和整数b相乘,结果存入a数组
3.逐位进位
4.逆序输出
*/ 
#include<bits/stdc++.h>
using namespace std;
string s1;
long long a[100000000],b,p=0,t=0;
int main()
{
    cin>>s1>>b;
    for(long long i=0;i<s1.size();i++)
    {
        a[i]=s1[s1.size()-1-i]-'0';
    }
    for(long long i=0;i<s1.size();i++)
    {
        a[i]=a[i]*b;
    }
    for(long long i=0;i<s1.size()+9999999;i++)
    {
        if(a[i]>=10)
        {
            a[i+1]=a[i+1]+a[i]/10;
            a[i]=a[i]%10;
        }
    }
    for(long long i=0;i<s1.size()+9999999;i++)
    {
        if(a[i]!=0)
        {
            p=i;
        }
    }
    for(long long i=p;i>=0;i--)
    {
         cout<<a[i];
    }
    return 0;
}

by hkdzyhk @ 2024-04-27 21:46:51

@Kobe_Bryan 代码如下:

#include<bits/stdc++.h>
using namespace std;
char a1[2005],b1[2005];
long long a[2005]={0},b[2005]={0},lena,lenb,c[200000005]={0},lenc;
void read(){
    cin>>a1>>b1;
    lena=strlen(a1);
    lenb=strlen(b1);
    for(int i=lena;i>0;i--)a[i]=a1[lena-i]-'0';
    for(int i=lenb;i>0;i--) b[i]=b1[lenb-i]-'0';    
}
void print(){
    for(int i=lenc;i>=1;i--) cout<<c[i];
}
void mul(){
    lenc=lena+lenb;
    for(int i=1;i<=lena;i++){
        for(int j=1;j<=lenb;j++){
            c[i+j-1]+=a[i]*b[j];
            c[i+j]+=c[i+j-1]/10;
            c[i+j-1]%=10;
        }
    }
    while(c[lenc]==0 && lenc>1) lenc--;
}
int main(){
    read();
    mul();
    print();
}

|