Yuley @ 2024-09-13 20:07:08
求助大佬解答,谢谢
#include<iostream>
using namespace std;
int a[10005];
int b[10005];
int c[10005];
int main(){
string n,m;
cin>>n>>m;
int lenn=n.length();
int lenm=m.length();
for(int i=0;i<lenn;i++){
a[i]=n[lenn-i-1]-'0';
}
for(int i=0;i<lenm;i++){
b[i]=m[lenm-i-1]-'0';
}
int lenc=lenn+lenm;
for(int i=0;i<lenn;i++){
for(int j=0;j<lenm;j++){
c[i+j]=a[i]*b[j];
}
}
for(int i=0;i<lenc;i++){
if(c[i]>=10){
c[i+1]+=c[i]/10;
c[i]%=10;
}
}
while(c[lenc-1]==0&&lenc>=1)lenc--;
for(int i=lenc-1;i>=0;i--)cout<<c[i];
return 0;
}
by Y_J_Y @ 2024-09-13 20:28:31
第20行改为c[i+j]+=a[i]*b[j];
第29改为while(c[lenc-1]==0&&lenc>1)lenc--;
by girl__20130619 @ 2024-09-13 20:34:36
@Yuley
#include<iostream>
#include<cstring>
using namespace std;
char s[210];
int a[210], c[310], b[210], la, lb, lc;
int main(){
scanf("%s",s+1);
la=strlen(s+1);
for(int i=1;i<=la;i++) a[i]=s[la-i+1]-'0';
scanf("%s",s+1);
lb=strlen(s+1);
for(int i=1;i<=lb;i++) b[i]=s[lb-i+1]-'0';
lc=la+lb;
for(int i=1;i<=200;i++) c[i]=0;
for(int i=1;i<=la;i++) for(int j=1;j<=lb;j++) c[i+j-1]+=a[i]*b[j];
for(int i=1;i<=lc;i++){
c[i+1]=c[i+1]+c[i]/10;
c[i]%=10;
}
while(c[lc]==0&&lc>1) lc--;
for(int i=lc;i>=1;i--) printf("%d",c[i]);
}
求关
by liyunhe @ 2024-09-13 20:39:37
@Yuley
for(int i=0;i<lenn;i++){
for(int j=0;j<lenm;j++){
c[i+j]=a[i]*b[j];
}
}
你难道还没发现问题?
by liyunhe @ 2024-09-13 20:43:38
你的代码没错只是少了+
for(int i=0;i<lenn;i++){
for(int j=0;j<lenm;j++){
c[i+j]+=a[i]*b[j];
}
}
但是这样 #1还是过不了
需要加一个特判
if(n=="0"||m=="0"){
cout<<0<<endl;
return 0;
}
by liyunhe @ 2024-09-13 20:46:11
@Yuley 你看看用你的代码过的
by Yuley @ 2024-09-14 18:40:26
@liyunhe 感谢大佬回复,本蒟蒻很粗心,而且很久没有写高精度了
by Yuley @ 2024-09-14 18:40:42
@girl__20130619 感谢大佬回复,本蒟蒻很粗心,而且很久没有写高精度了
by Yuley @ 2024-09-14 18:40:51
@Y_J_Y 感谢大佬回复,本蒟蒻很粗心,而且很久没有写高精度了