题解:P1303 A*B Problem
A*B Problem 题解
第一次写,不好请见谅……
思路
首先,题目提到 $A,B \le 10^{2000}$,可见这是一道高精度的题。
然后,可以想到:利用数组模拟竖式乘法的计算过程,逐位相乘,但要注意进位。
最后,倒序输出,并处理前导零。
Code
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[2005],b[2005],c[4010],n,m,xb;
string ci;
void mul(void){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
//将结果先存入 c 数组。不处理进位。
c[i+j-1]+=a[i]*b[j];
xb=max(xb,i+j-1);
}
}
int s=0,t,bj=0;
for(int i=1;i<=xb;i++){
t=c[i];
c[i]=(c[i]+s)%10;
s=(t+s)/10;
//处理进位
}
if(s>0)cout<<s;
for(int i=xb;i>=1;i--)if(bj==1||c[i]!=0)cout<<c[i],bj=1;
if(bj==0)cout<<0;
//输出时要处理前导零。
}
signed main(){
cin>>ci;
for(int i=ci.size()-1;i>=0;i--){
//反着取,方便处理进位
a[++n]=ci[i]-'0';
}
cin>>ci;
for(int i=ci.size()-1;i>=0;i--){
b[++m]=ci[i]-'0';
}
mul();
return 0;
}
第一次写,有问题可以提出,我尽力修正(TNT_THT)。

浙公网安备 33010602011771号