homi @ 2023-02-16 14:53:15
#include <bits/stdc++.h>
using namespace std;
int a[2000],b[2000],ans[4000],len_a,len_b,len_ans;
void read(int *a,int &len)
{
string s;
cin>>s;
len=s.length();
for(int i=0;i<len;i++)
a[i]=s[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 LucasXu80 @ 2023-02-16 15:00:55
有没有考虑过一种情况,
len_ans=len_a+len_b-1;
这样算出来的len_ans大于实际的答案长度,使得代码会多输出。
by homi @ 2023-02-16 15:05:01
@LucasXu80 额 ,我不懂代码,晚上孩子放学我给他看下,让他自己再想想,感谢您的回复
by LucasXu80 @ 2023-02-16 15:08:52
@homi2011 不用谢。因为我后面可能无法回复了,如果他还是无法理解的话,可以提示他,0乘任何数都会得到一个一位数。
by homi @ 2023-02-16 15:12:54
@LucasXu80 好的
by winterl @ 2023-04-26 19:33:27
@LucasXu80 这句话一下把我点醒,想了好久来着
by wangjiawen @ 2023-05-13 21:09:29
好像不是,第一项结果是0,特判了吗?( 其实我没看代码。)