0fps 样例全对

P1303 A*B Problem

Lolitan @ 2024-07-09 16:48:32


#include<bits/stdc++.h>
using namespace std;
int aa[55550],bb[55550],cc[55555];
string a,b;
int m,f,g,h,n=1,k,s,u;
int main(){
    cin>>a>>b;
    f=a.size();
    s=a.size();
    u=b.size();
    g=b.size();
    m=max(a.size()+1,b.size()+1);

    for(int i=1;i<=f;i++){
        s--;
        aa[i]=a[s]-'0';

    }
    for(int i=1;i<=g;i++){
        u--;
        bb[i]=b[u]-'0';
    }
    for(int i=1;i<=m;i++){
        for(int j=1;j<=g;j++){
            cc[i+j-1]=(aa[i]*bb[j]+cc[i+j-1]);
            if(aa[i]*bb[i]>=10){
                k=cc[i];
                cc[i]%=10;
                cc[i+1]=(k-(k%10))/10;
            }
        }n*=10;
    }
    for(int i=m+100;i>=1;i--){
        if(cc[i]!=0){
            h=i;
            break;
        }
    }
    for(int i=h;i>=1;i--){
        cout<<cc[i];
    }
    return 0;
}

by a1Ex999 @ 2024-07-09 16:53:31

#include <bits/stdc++.h>
using namespace std;
string s1,s2;
int a[11000],b[11000],c[11000];
int len1,len2,len;
int main(){
    cin>>s1>>s2;
    if(s1=="0"||s2=="0"){
        cout<<0;
        return 0;
    }
    len1=s1.size();
    for(int i=1;i<=len1;i++){
        a[i]=s1[len1-i]-'0';
    }
    len2 =s2.size();
    for(int i=1;i<=len2;i++){
        b[i]=s2[len2-i]-'0';
    }
    len=len1+len2;
    for(int i=1;i<=len1;i++){
        for(int j=1;j<=len2;j++){
            c[i+j-1]+=a[i]*b[j];
        }
    }
    for(int i=1;i<=len;i++){
        if(c[i]>=10){
            c[i+1]+=c[i]/10;
            c[i]%=10;
        }
    }
    if(c[len]==0) len--;
    for(int i=len;i>=1;i--){
        cout<<c[i];
    }
    return 0;
} 

可以试试这样


by Lolitan @ 2024-07-09 17:22:34

俢改琎位 依倃爆0


#include<bits/stdc++.h>
using namespace std;
int aa[55550],bb[55550],cc[55555];
string a,b;
int m,f,g,h,n=1,k,s,u;
int main(){
    cin>>a>>b;
    f=a.size();
    s=a.size();
    u=b.size();
    g=b.size();
    m=max(a.size()+1,b.size()+1);

    for(int i=1;i<=f;i++){
        s--;
        aa[i]=a[s]-'0';     
    }
    for(int i=1;i<=g;i++){
        u--;
        bb[i]=b[u]-'0';
    }
    for(int i=1;i<=m;i++){
        for(int j=1;j<=g;j++){
            cc[i+j-1]=(aa[i]*bb[j]+cc[i+j-1]);
        }
    }
    for(int i=1;i<=m;i++){
        if(cc[i]>=10){
        k=cc[i];
        cc[i]%=10;
        cc[i+1]+=(k-(k%10))/10;
        }
    }

    for(int i=m+10;i>=1;i--){
        if(cc[i]!=0){
            h=i;
            break;
        }
    }
    for(int i=h;i>=1;i--){
        cout<<cc[i];
    }
    return 0;
}

by a1Ex999 @ 2024-07-09 17:32:32

@Lolitan 24行是不是要去掉+cc[i+j-1]


by Lolitan @ 2024-07-09 17:33:16

改了俩数据 60()


#include<bits/stdc++.h>
using namespace std;
int aa[55550],bb[55550],cc[55555];
string a,b;
int m,f,g,h,n=1,k,s,u;
int main(){
    cin>>a>>b;
    f=a.size();
    s=a.size();
    u=b.size();
    g=b.size();
    m=max(a.size()+1,b.size()+1);

    for(int i=1;i<=f;i++){
        s--;
        aa[i]=a[s]-'0';     
    }
    for(int i=1;i<=g;i++){
        u--;
        bb[i]=b[u]-'0';
    }
    for(int i=1;i<=f;i++){
        for(int j=1;j<=g;j++){
            cc[i+j-1]=(aa[i]*bb[j]+cc[i+j-1]);
        }
    }
    for(int i=1;i<=m+10000;i++){
        if(cc[i]>=10){
        k=cc[i];
        cc[i]%=10;
        cc[i+1]+=(k-(k%10))/10;
        }
    }

    for(int i=m+1000;i>=1;i--){
        if(cc[i]!=0){
            h=i;
            break;
        }
    }
    for(int i=h;i>=1;i--){
        cout<<cc[i];
    }
    return 0;
}

by a1Ex999 @ 2024-07-09 17:33:57

好像这样也过不了,我试了下


by Lolitan @ 2024-07-09 17:50:25

@LYX710Staly 找到問偍了 前导0部分沒扫到 而且少一个0的特判 AC


#include<bits/stdc++.h>
using namespace std;
int aa[55550],bb[55550],cc[55555];
string a,b;
int m,f,g,h,n=1,k,s,u;
int main(){
    cin>>a>>b;
    f=a.size();
    s=a.size();
    u=b.size();
    g=b.size();
    m=max(a.size()+1,b.size()+1);

    for(int i=1;i<=f;i++){
        s--;
        aa[i]=a[s]-'0';     
    }
    for(int i=1;i<=g;i++){
        u--;
        bb[i]=b[u]-'0';
    }
    for(int i=1;i<=f;i++){
        for(int j=1;j<=g;j++){
            cc[i+j-1]=(aa[i]*bb[j]+cc[i+j-1]);
        }
    }
    for(int i=1;i<=m+50000;i++){
        if(cc[i]>=10){
        k=cc[i];
        cc[i]%=10;
        cc[i+1]+=(k-(k%10))/10;
        }
    }

    for(int i=m+50000;i>=1;i--){
        if(cc[i]!=0){
            h=i;
            break;
        }
        if(i==1&&cc[1]==0){
            cout<<0;
            return 0;
        }
    }
    for(int i=h;i>=1;i--){
        cout<<cc[i];
    }
    return 0;
}

|