八十分求助

P1303 A*B Problem

freakflowey98 @ 2020-09-18 22:27:49

不开o2就wa,开了o2就tle

代码如下

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string num1; 
string num2;//储存输入的字符串 
int data1[1000]={0}; 
int data2[1000]={0};//加数 
int ans[2000]={0}; //答案 
int main() {
    std::cin>>num1;
    std::cin>>num2;//输入
    reverse(num1.begin(),num1.end());
    reverse(num2.begin(),num2.end());//反转加数以便做加法
    int len1=num1.length();
    int len2=num2.length();//两个数的长度 
    for (int i=0;i<len1;i++) data1[i]=num1[i]-48;
    for (int i=0;i<len2;i++) data2[i]=num2[i]-48;
    //将输入的字符串化为加数
    int car=0;//进位 
    for (int i=0;i<len1;i++) {
        car=0;
        for (int j=0;j<len2;j++) {
            ans[i+j]+=data1[i]*data2[j]+car;
            car=ans[i+j]/10;
            ans[i+j]%=10;
        }
        //每一遍循环之后的进位
        ans[i+len2]+=car;
    }
    int ind=len1+len2;
    while (ind>0&&ans[ind]==0) ind--;
    //去掉前面多余的0
    for (int i=ind;i>=0;i--)
        std::cout<<ans[i];//输出答案 
    return 0;//华丽收尾 
}

by Water_Cows @ 2020-09-18 22:49:57

数组开小了。。。。


by 不近女色 @ 2020-10-04 16:15:54

1.别用string,用char数组,不然最后一个用例很可能超时。 2.数组长度不够,我开的长度是10001才过了最后的用例。


by liweiqing @ 2021-01-10 17:13:25

2001、 4002足以

char a[2001],b[2001];
int aa[2001],bb[2001],ans[4002];

|