大家帮忙看看,哪里错了???我在c++中测试没有错!!!(高精×高精)

P1303 A*B Problem

B2214shengmin @ 2022-06-25 21:32:53

#include<bits/stdc++.h>
using namespace std;
int int1[1010],int2[1010]; 
char str1[1010],str2[1010];
void init(char a[],int *b){//字符转数组 
    int l=strlen(a);
    for(int i=0;i<l;i++){
        b[i]=a[l-i-1]-'0'; 
    }
}
void mult(char a[],char b[]){//高精*高精 
    init(a,int1);init(b,int2);
    int c[2022],i,j;
    memset(c,0,sizeof(c));
    int len_a=strlen(a),len_b=strlen(b);
    for(i=0;i<len_a;i++){
        for(j=0;j<len_b;j++){
            c[i+j]=c[i+j]+int1[i]*int2[j];
            c[i+j+1]=c[i+1+j]+c[i+j]/10;//进位 
            c[i+j]%=10;//保留当前位置乘积 
        }
    }//i=len_a-1,b=len_b-1
    int k=len_a+len_b-1;
    while(c[k]>=10){
        c[k+1]=c[k]/10;
        c[k]%=10;
        k++;
    }
    while(k>0&&c[k]==0)k--;
    for(int h=k;h>=0;h--)cout<<c[h];
}
int main() {
    while(scanf("%s%s",str1,str2)==2){
        memset(int1,0,sizeof(int1));
        memset(int2,0,sizeof(int2));
        mult(str1,str2);
        cout<<endl;
    }
    return 0;                       
}

by ajahjahah @ 2022-06-25 21:37:42

每个数字不超过 10^{2000}

RE了一般就是数组开小了,读读题啊


by ajahjahah @ 2022-06-25 21:43:51

@B2214shengmin 提交所有都与题解一样怎么解释


by ajahjahah @ 2022-06-25 21:48:59

马上就举报

洛谷非常重视学术诚信。此类行为将会导致您成为作弊者。 具体细则请查看洛谷社区规则。


by B2214shengmin @ 2022-06-25 21:50:22

还错了!!! 改成20100了还不行????

#include<bits/stdc++.h>
using namespace std;
int int1[20100],int2[20100]; 
char str1[20100],str2[20100];
void init(char a[],int *b){//字符转数组 
    int l=strlen(a);
    for(int i=0;i<l;i++){
        b[i]=a[l-i-1]-'0'; 
    }
}

void mult(char a[],char b[]){//高精*高精 
    init(a,int1);init(b,int2);
    int c[2022],i,j;
    memset(c,0,sizeof(c));
    int len_a=strlen(a),len_b=strlen(b);
    for(i=0;i<len_a;i++){
        for(j=0;j<len_b;j++){
            c[i+j]=c[i+j]+int1[i]*int2[j];
            c[i+j+1]=c[i+1+j]+c[i+j]/10;//进位 
            c[i+j]%=10;//保留当前位置乘积 
        }
    }//i=len_a-1,b=len_b-1
    int k=len_a+len_b-1;
    while(c[k]>=10){
        c[k+1]=c[k]/10;
        c[k]%=10;
        k++;
    }
    while(k>0&&c[k]==0)k--;
    for(int h=k;h>=0;h--)cout<<c[h];
}
int main() {
    while(scanf("%s%s",str1,str2)==2){
        memset(int1,0,sizeof(int1));
        memset(int2,0,sizeof(int2));
        mult(str1,str2);
        cout<<endl;
    }
    return 0;                                                                                                           
}

by B2214shengmin @ 2022-06-25 21:50:55

?


by B2214shengmin @ 2022-06-25 21:51:29

@lao_ba ?


by ajahjahah @ 2022-06-25 22:02:22

@B2214shengmin

 c[i+j]=c[i+j]+int1[i]*int2[j];
1\times 1\neq10

而且你一道高精都过不了

疫情控制怎么过的?

洛谷已经写了

抄袭、复制题解,以达到刷 AC 率/AC 数量或其他目的的行为,在洛谷是严格禁止的。

洛谷非常重视学术诚信。此类行为将会导致您成为作弊者。 具体细则请查看洛谷社区规则。

提交题解前请务必阅读题解审核要求及反馈要求。


by B2214shengmin @ 2022-06-25 22:08:33

我问老师的行不行?


by B2214shengmin @ 2022-06-25 22:09:23

@lao_ba


by B2214shengmin @ 2022-06-25 22:11:58

@lao_ba 我在附中的网站做过


| 下一页