40分是为什么?

P1303 A*B Problem

caixukun___123 @ 2024-08-15 10:08:59

有没有大佬帮忙一下,40分是为什么?

#include<bits/stdc++.h>
using namespace std;
vector<int> C;
void mul(vector<int> &A,int b){
    int t=0;
    for(int i=0;i<A.size()||t;i++){
        if(i<A.size()) t+=A[i]*b;
        C.push_back(t%10);
        t/=10;
    }
}
int main(){
    string a;
    int b;
    vector<int> A;
    cin>>a>>b;
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
    mul(A,b);
    for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);
    return 0;
}

by lxr_Galaxy @ 2024-08-15 10:10:15

这题高精 @guojingqi123


by jmy2012 @ 2024-08-15 10:12:34

众所周知,b也是高精整数


by caixukun___123 @ 2024-08-15 10:13:20

@lxr_Galaxy 我用的是高精,但是不给我过啊QwQ


by jmy2012 @ 2024-08-15 10:14:01

@guojingqi123 这要把b换成高精度数字?


by realheizi @ 2024-08-15 10:14:17

@guojingqi123 我给个两个整数都高精的

#include<bits/stdc++.h>
using namespace std;
string A,B;
int a[114514],b[114514],c[114514];
int main(){
    cin>>A>>B;
    reverse(A.begin(),A.end());
    reverse(B.begin(),B.end());
    for(int i=0;i<A.size();i++)a[i]=A[i]-'0';
    for(int i=0;i<B.size();i++)b[i]=B[i]-'0';
    int lena=A.size();
    int lenb=B.size();
    for(int i=0;i<lena;i++){
        for(int j=0;j<lenb;j++){
            c[i+j]+=a[i]*b[j];
        }
    }
    int len=0;
    while(c[len]!=0){
        c[len+1]+=c[len]/10;
        c[len]%=10;
        len++;
    }
    for(int i=len-1;i>=0;i--)cout<<c[i];
    if(len==0)cout<<0;
    return 0;
}

by realheizi @ 2024-08-15 10:15:42

@guojingqi123 你的b是int类型...


by caixukun___123 @ 2024-08-15 10:16:19

@jmy2012 谢谢,发现问题了,已经过了


by lxr_Galaxy @ 2024-08-15 10:16:23

#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];
    }
}

@guojingqi123


by lxr_Galaxy @ 2024-08-15 10:16:48

@guojingqi123 你开的是int


by realheizi @ 2024-08-15 10:16:49

b也需要用string存


| 下一页