救命

P1303 A*B Problem

ryy_ @ 2024-11-02 09:49:20

80

#include<bits/stdc++.h>
using namespace std;
int a[2005],b[2005],c[4005];
int main(){
    string s1,s2;
    cin>>s1;
    cin>>s2;
    int k=s1.size();
    int l=s2.size();
    int x=1;
    for(int i=k-1;i>=0;i--){
        a[x]=s1[i]-'0';
        x++;
    }
    x=1;
    for(int i=l-1;i>=0;i--){
        b[x]=s2[i]-'0';
        x++;
    }
    int w;
    int t;
    for(int i=1;i<=k;i++){
        int j;
        w=0;
        for(j=1;j<=l;j++){
            t=c[i+j-1]+w+a[i]*b[j];
            if(t>=10){
                w=t/10;
            }else{
                w=0;
            }
            c[i+j-1]=t%10;
        }
        if(w!=0)c[i+j-1]=w;
    }
    int len=k+l+1;
    while(c[len]==0)len--;
    for(int i=len;i>=1;i--)cout<<c[i];
    return 0; 
}

by Wdx_110113 @ 2024-11-02 09:56:58

[自动回复]建议您拨打110进行求助


by KXGLwastaken @ 2024-11-02 20:07:40

这个应该是没有考虑到计算结果为0时,需要保留一位0的情况,不能将其视作前导0一块删掉。

#include<bits/stdc++.h>
using namespace std;
int a[2005],b[2005],c[4005];
int main(){
    string s1,s2;
    cin>>s1;
    cin>>s2;
    int k=s1.size();
    int l=s2.size();
    int x=1;
    for(int i=k-1;i>=0;i--){
        a[x]=s1[i]-'0';
        x++;
    }
    x=1;
    for(int i=l-1;i>=0;i--){
        b[x]=s2[i]-'0';
        x++;
    }
    int w;
    int t;
    for(int i=1;i<=k;i++){
        int j;
        w=0;
        for(j=1;j<=l;j++){
            t=c[i+j-1]+w+a[i]*b[j];
            if(t>=10){
                w=t/10;
            }else{
                w=0;
            }
            c[i+j-1]=t%10;
        }
        if(w!=0)c[i+j-1]=w;
    }
    int len=k+l+1;
    while(c[len]==0&&len>1)len--; #这是修改部分,增加一个长度大于1时的条件即可
    for(int i=len;i>=1;i--)cout<<c[i];
    return 0; 
}

以上代码亲测可AC.


by KXGLwastaken @ 2024-11-02 22:07:53

前面那个注释符号写错了, 是"//"不是"#",最近python写顺手了写混了


|