最后一个怎么搞?

P1303 A*B Problem

Im_Joker @ 2023-12-02 22:28:31

一开始是这个代码:

#include<bits/stdc++.h>
using namespace std;
unsigned long long a[2001]={0},b[2001]={0},c[2001]={0},d[2001]={0}; 
int main(){
    string n,m;
    cin>>n>>m;
    int c_a=2000,c_b=2000;
    for(int i=n.size()-1;i>=0;i--){
        a[c_a--]=n[i]-48;
    }
    for(int i=m.size()-1;i>=0;i--){
        b[c_b--]=m[i]-48;
    }
    int g=0;
    int c_c=2000;
    for(int i=2000;i>=0;i--){
        g=0;
        memset(d,0,sizeof(d));  
        for(int j=2000;j>=0;j--){
            d[j]+=b[j]*a[i];
            d[j]+=g;
            g=d[j]/10;
            d[j]%=10;
        }
        g=0;
        int c_c1=c_c;
        for(int j=2000;j>=0;j--){
            c[c_c1]+=d[j]+g;
            g=c[c_c1]/10;
            c[c_c1]%=10;
            c_c1--;
        }
        c_c--;
    }
    int w;
    bool flag=true;
    for(int i=0;i<=2000;i++){
        if(c[i]!=0){
            w=i;
            flag=false;
            break;
        }
    }
    if(flag){
        cout<<0;
        return 0;
    }
    for(;w<=2000;w++){
        cout<<c[w];
    }
    return 0;
}

结果#5 WA了。

修改后的代码:

#include<bits/stdc++.h>
using namespace std;
unsigned long long a[2001]={0},b[2001]={0},c[4001]={0},d[2001]={0}; 
int main(){
    string n,m;
    cin>>n>>m;
    int c_a=2000,c_b=2000;
    for(int i=n.size()-1;i>=0;i--){
        a[c_a--]=n[i]-48;
    }
    for(int i=m.size()-1;i>=0;i--){
        b[c_b--]=m[i]-48;
    }
    int g=0;
    int c_c=4000;
    for(int i=4000;i>=0;i--){
        g=0;
        memset(d,0,sizeof(d));  
        for(int j=4000;j>=0;j--){
            d[j]+=b[j]*a[i];
            d[j]+=g;
            g=d[j]/10;
            d[j]%=10;
        }
        g=0;
        int c_c1=c_c;
        for(int j=4000;j>=0;j--){
            c[c_c1]+=d[j]+g;
            g=c[c_c1]/10;
            c[c_c1]%=10;
            c_c1--;
        }
        c_c--;
    }
    int w;
    bool flag=true;
    for(int i=0;i<=4000;i++){
        if(c[i]!=0){
            w=i;
            flag=false;
            break;
        }
    }
    if(flag){
        cout<<0;
        return 0;
    }
    for(;w<=4000;w++){
        cout<<c[w];
    }
    return 0;
}

结果全部RE了。

求dalao帮忙


by lzm0107 @ 2023-12-02 23:37:11

数组开大


by Im_Joker @ 2023-12-02 23:57:12

Thank you very much!


|