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
每个非负整数不超过
你开的
by ycyy @ 2023-10-12 15:55:44
@YiX01 好的,我试试
by ycyy @ 2023-10-12 16:08:16
@YiX01 最后一个过了,第一个还是没过```#include<iostream>
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
如果
by YiX01 @ 2023-10-12 18:42:38
第一份代码把数组开大,特判
by YiX01 @ 2023-10-12 18:43:33
@ycyy
by ycyy @ 2023-10-13 16:05:34
@YiX01 欧克,谢谢