80分,AC必关

P1303 A*B Problem

18732010135dd @ 2024-09-01 23:03:26

#include<bits/stdc++.h>
using namespace std;
void mul(int a[],int b[],int c[]){
    for(int i=1;i<=b[0];i++){
        int x=0;
        for(int j=1;j<=a[0];j++){
            c[i+j-1]=c[i+j-1]+x+b[i]*a[j];
            x=c[i+j-1]/10;
            c[i+j-1]%=10;
        }
        c[i+a[0]]=x;
    }
    if(c[a[0]+b[0]]>0){
        c[0]=a[0]+b[0];
    }else{
        c[0]=a[0]+b[0]-1;
    }
}
void init(int a[]){
    string s;
    cin>>s;
    a[0]=s.length();
    for(int i=1;i<=a[0];i++){
        a[i]=s[a[0]-i]-'0';
    }
}
int main() {
    int a[10000]={0},b[10000]={0},c[10000]={0};
    init(a);
    init(b);
    mul(a,b,c);
    for(int i=c[0];i>0;i--){
        cout<<c[i];
    }
    return 0;
}

by lxr_Galaxy @ 2024-09-01 23:09:49

#include<iostream>
#include<cstring>
using namespace std;
int main(){
    char a_str[2005]={};
    char b_str[2005]={};
    cin>>a_str>>b_str;

    int a[2005]={},b[2005]={};
    int len_a=strlen(a_str),len_b=strlen(b_str);
    for(int i=0;i<=len_a-1;i++){
        a[len_a-i-1]=a_str[i]-48;
    }
    for(int i=0;i<=len_b-1;i++){
        b[len_b-i-1]=b_str[i]-48;
    }

    int ans[4010]={};
    int in=0;
    for(int j=0;j<=len_b-1;j++){
        for(int i=0;i<=len_a-1;i++){
            ans[i+j]=a[i]*b[j]+in+ans[i+j];
            in=ans[i+j]/10;
            ans[i+j]%=10;
        }
        ans[len_a+j]=in;
        in=0;
    }
    int len_ans=len_a+len_b;
    while(ans[len_ans-1]==0 && len_ans>1){
        len_ans--;
    }
    for(int i=len_ans-1;i>=0;i--){
        cout<<ans[i];
    }
}

我明天要上学,你先对着看下吧QAQ


by xueshengyi @ 2024-09-01 23:10:02

要去掉前导0


by CaoSheng_zzz @ 2024-09-02 00:50:11

不会


by 立柱已选162534 @ 2024-09-02 07:23:08

@18732010135dd 0乘上一个比较大的数会出错


by 18732010135dd @ 2024-09-02 16:45:47

谢谢大佬,已关


|