ryy_ @ 2024-11-02 09:49:20
80
#include<bits/stdc++.h>
using namespace std;
int a[2005],b[2005],c[4005];
int main(){
string s1,s2;
cin>>s1;
cin>>s2;
int k=s1.size();
int l=s2.size();
int x=1;
for(int i=k-1;i>=0;i--){
a[x]=s1[i]-'0';
x++;
}
x=1;
for(int i=l-1;i>=0;i--){
b[x]=s2[i]-'0';
x++;
}
int w;
int t;
for(int i=1;i<=k;i++){
int j;
w=0;
for(j=1;j<=l;j++){
t=c[i+j-1]+w+a[i]*b[j];
if(t>=10){
w=t/10;
}else{
w=0;
}
c[i+j-1]=t%10;
}
if(w!=0)c[i+j-1]=w;
}
int len=k+l+1;
while(c[len]==0)len--;
for(int i=len;i>=1;i--)cout<<c[i];
return 0;
}
by Wdx_110113 @ 2024-11-02 09:56:58
[自动回复]建议您拨打110进行求助
by KXGLwastaken @ 2024-11-02 20:07:40
这个应该是没有考虑到计算结果为0时,需要保留一位0的情况,不能将其视作前导0一块删掉。
#include<bits/stdc++.h>
using namespace std;
int a[2005],b[2005],c[4005];
int main(){
string s1,s2;
cin>>s1;
cin>>s2;
int k=s1.size();
int l=s2.size();
int x=1;
for(int i=k-1;i>=0;i--){
a[x]=s1[i]-'0';
x++;
}
x=1;
for(int i=l-1;i>=0;i--){
b[x]=s2[i]-'0';
x++;
}
int w;
int t;
for(int i=1;i<=k;i++){
int j;
w=0;
for(j=1;j<=l;j++){
t=c[i+j-1]+w+a[i]*b[j];
if(t>=10){
w=t/10;
}else{
w=0;
}
c[i+j-1]=t%10;
}
if(w!=0)c[i+j-1]=w;
}
int len=k+l+1;
while(c[len]==0&&len>1)len--; #这是修改部分,增加一个长度大于1时的条件即可
for(int i=len;i>=1;i--)cout<<c[i];
return 0;
}
以上代码亲测可AC.
by KXGLwastaken @ 2024-11-02 22:07:53
前面那个注释符号写错了, 是"//"不是"#",最近python写顺手了写混了