题解: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)。

posted @ 2026-09-09 15:16  TNT_THT  阅读(6)  评论(0)    收藏  举报