题解 P1303 【A*B Problem】
ComplexPug · · 题解
蒟蒻奉上
第三十篇的题解,
总的说就是想一下 0小学0 学的乘法竖式
然后第一层循环 附代码 #
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int la,lb,s,n,a[10100],b[10100],ans[110000];
string aa,bb;//string好用
int main()
{
cin>>aa>>bb;//直接输入
la=aa.size();//他们的大小
lb=bb.size();
for(int i=1;i<=la;++i)//由字符转化成数字
a[i]=aa[la-i]-'0';
for(int i=1;i<=lb;++i)
b[i]=bb[lb-i]-'0';
for(int i=1;i<=la;++i)//竖式的下边
{
s=0;
for(int j=1;j<=lb;++j)//竖式的上边
{
ans[i+j-1]+=a[i]*b[j]+s;//相乘+上一次多出
s=ans[i+j-1]/10;//来的,再整理一下ans和s
ans[i+j-1]%=10;//准备下一次使用
}
ans[i+lb]=s;//最后s有剩余的时候特别判一下
}
int n=la+lb;//最多这么多
while(ans[n]==0&&n>0)//多的时候去掉前缀
n--;
if(!n)//答案是0的时候ans都删没了,所以这个也要处理
cout<<0;
while(n)//倒着输出
printf("%d",ans[n--]);
return 0;
}
总的来说很简单,细心,细心,细心说三遍