数据需要加强
  • 板块P1303 A*B Problem
  • 楼主jjsnam
  • 当前回复9
  • 已保存回复9
  • 发布时间2022/3/14 22:33
  • 上次更新2023/10/28 06:34:22
查看原帖
数据需要加强
528114
jjsnam楼主2022/3/14 22:33

AC代码如下,但这应该是错误的

#include <iostream>
#include <string>
using namespace std;

string ina,inb;
short a[2005],b[2005];
short ans[2005];

void Multiply(short a[],short b[]){
    ans[0]=a[0]+b[0];
    for (int i=1;i<=a[0];i++){
        for (int j=1;j<=b[0];j++){
            ans[i+j-1]+=a[i]*b[j];
        }
    }
    for (int i=1;i<=ans[0];i++){
        ans[i+1]+=ans[i]/10;
        ans[i]%=10;
    }
    while (ans[0]>1&&ans[ans[0]]==0) ans[0]--;
}

void print(){
    for (int i=ans[0];i>0;i--){
        cout << ans[i];
    }
    cout << endl;
}

int main(){
    freopen("/Users/liyumei1973/Desktop/信奥赛/作业/sample.in","r",stdin);
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin >> ina;
    cin >> inb;
    a[0]=ina.size(),b[0]=inb.size();
    for (int i=a[0],j=0;i>0;i--,j++){
        a[i]=ina[j]-'0';
    }
    for (int i=b[0],j=0;i>0;i--,j++){
        b[i]=inb[j]-'0';
    }
    Multiply(a,b);
    print();
    return 0;
}

问题在于ans数组的大小。 如果按照题目的数据范围,a和b都是2000位的数字,那么他们相乘可以达到4000位数字,以我ans开的数据范围会RE 数据需要加强

2022/3/14 22:33
加载中...