请问,第一个和最后一个不对

P1303 A*B Problem

ycyy @ 2023-10-12 11:41:26


第一个输出结果是00,可代码最后的if不是应该去掉一个0了吗,最后一个是超时
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
int a[1000],b[1000],c[1000];
char m[1000],n[1000];
int main(){ 

    cin>>m>>n;
    int L1=strlen(m);
    int L2=strlen(n);
    for(int i=0;i<L1;i++){
        a[L1-i]=m[i] - '0';
    }
    for(int i=0;i<L2;i++){
        b[L2-i]=n[i] - '0'; 
    }
    int k=L1+L2;
    for(int i=1;i<=L1;i++){
        for(int j=1;j<=L2;j++){
        c[i+j-1]+=a[i]*b[j];
        c[i+j]+=c[i+j-1]/10;
        c[i+j-1]%=10;
        } 
    }
    if(c[k]==0 && k >0)k--;
    for(int i=k;i>0;i--){
        cout<<c[i];
    }
    return 0;
    }

by YiX01 @ 2023-10-12 11:43:57

你可以试试把你的 if 改成 while。


by YiX01 @ 2023-10-12 12:03:19

每个非负整数不超过 10^{2000}

你开的 1000 的数组,你不挂谁挂。


by ycyy @ 2023-10-12 15:55:44

@YiX01 好的,我试试


by ycyy @ 2023-10-12 16:08:16

@YiX01 最后一个过了,第一个还是没过```#include<iostream>

include<string.h>

include<math.h>

using namespace std; int a[100000000],b[100000000],c[100000000]; char m[100000000],n[100000000]; int main(){

cin>>m>>n;
int L1=strlen(m);
int L2=strlen(n);
int A,B;
A=m[L1]-'0';//没什么意义,只是但凡有0,赋值
B=n[L2]-'0';
for(int i=0;i<L1;i++){
    a[L1-i]=m[i] - '0';
}
for(int i=0;i<L2;i++){
    b[L2-i]=n[i] - '0'; 
}
int k=L1+L2;
for(int i=1;i<=L1;i++){
    for(int j=1;j<=L2;j++){
    c[i+j-1]+=a[i]*b[j];
    c[i+j]+=c[i+j-1]/10;
    c[i+j-1]%=10;
    } 
}
if(A==0||B==0){cout<<0;}
else{
while(k>0&&c[k]==0)k--;
for(int i=k;i>0;i--)
    cout<<c[i];}
return 0;
}

by YiX01 @ 2023-10-12 18:41:57

如果 k=0,你的代码没有输出,应当特判 k=0


by YiX01 @ 2023-10-12 18:42:38

第一份代码把数组开大,特判 k=0 就能过了。


by YiX01 @ 2023-10-12 18:43:33

@ycyy


by ycyy @ 2023-10-13 16:05:34

@YiX01 欧克,谢谢


|