HarryPotterJames @ 2021-08-11 21:08:35
为啥当一个数是0,另一个数是n位数时,就会有n个0?
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
const int MAXN=5005;
int A[MAXN],B[MAXN],C[MAXN],Ans[MAXN],Len_A,Len_B,Len_Ans;
void Read(int *A,int &Len)
{
string cur;
cin>>cur;
Len=cur.length();
for(int i=0;i<Len;i++)A[i]=cur[i]-48;
reverse(A,A+Len);
}
int main()
{
Read(A,Len_A);
Read(B,Len_B);
Len_Ans=Len_A+Len_B-1;
for(int i=0;i<Len_A;i++)
for(int j=0;j<Len_B;j++)
Ans[i+j]+=A[i]*B[j];
for(int i=0;i<Len_Ans;i++)
if(Ans[i]>9)
Ans[i+1]+=Ans[i]/10,Ans[i]%=10;
while(Ans[Len_Ans])Len_Ans++;
for(int i=Len_Ans-1;i>=0;i--)
cout<<Ans[i];
return 0;
}
by 听取MLE声一片 @ 2021-08-11 21:13:37
@HarryPotterJames 你输出没判断0呗,自己看
by HarryPotterJames @ 2021-08-11 21:18:00
@听取MLE声一片 哦,是忘了……谢谢大佬指出
by Leonid @ 2021-08-11 21:18:35
因为你没去掉前导零
by HarryPotterJames @ 2021-08-11 21:23:51
@听取MLE声一片 我这个代码过了,但本机运行时如果第一个是0的话,第二个数就输不进去了。求问怎样改更好。谢谢!
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
const int MAXN=5005;
int A[MAXN],B[MAXN],C[MAXN],Ans[MAXN],Len_A,Len_B,Len_Ans;
int Read(int *A,int &Len)
{
string cur;
cin>>cur;
if(cur=="0") return 1;
Len=cur.length();
for(int i=0;i<Len;i++)A[i]=cur[i]-48;
reverse(A,A+Len);
return 0;
}
int main()
{
if(Read(A,Len_A)||Read(B,Len_B))
{
cout<<0;
return 0;
}
Len_Ans=Len_A+Len_B-1;
for(int i=0;i<Len_A;i++)
for(int j=0;j<Len_B;j++)
Ans[i+j]+=A[i]*B[j];
for(int i=0;i<Len_Ans;i++)
if(Ans[i]>9)
Ans[i+1]+=Ans[i]/10,Ans[i]%=10;
while(Ans[Len_Ans])Len_Ans++;
for(int i=Len_Ans-1;i>=0;i--)
cout<<Ans[i];
return 0;
}
by 听取MLE声一片 @ 2021-08-11 21:25:25
@HarryPotterJames 你代码是输入一个数如果是0就直接结束了
by HarryPotterJames @ 2021-08-11 21:28:25
@听取MLE声一片 是的……但我不知道怎么改
毕竟在洛谷上已经AC了
by HarryPotterJames @ 2021-08-11 21:29:19
@FriskLSZ 谢谢大佬
by 听取MLE声一片 @ 2021-08-11 21:29:32
@HarryPotterJames
int x=Read(A,Len_A),y=Read(B,Len_B);
if(x||y)
{
cout<<0;
return 0;
}
by HarryPotterJames @ 2021-08-11 21:30:34
@听取MLE声一片 谢谢 求互关