A*B Problem(High)

这高精度是真__的难

题目描述

给出两个自然数,求它们的乘积。

输入格式

输入共两行,每行一个自然数。

输出格式

输出一个自然数表示乘积。

样例 #1

样例输入 #1

1 
2

样例输出 #1

2

提示

每个自然数不超过 \(10^{2000}\)

code:

#include <bits/stdc++.h>
using namespace std;
int a[2023],b[2023],c[4000001];
string x,y;
int main(){
	cin>>x>>y;
	int n = x.size(),m = y.size();
	for(int i = 0;i<n;i++) a[i] = x[n-i-1] - '0';
	for(int i = 0;i<m;i++) b[i] = y[m-i-1] - '0';
	int t = n+m-1;
	for(int i = 0;i<n;i++)
		for(int j = 0;j<m;j++) 
			c[i+j] += a[i] * b[j];
	for(int i = 0;i<t;i++){
		c[i+1] += c[i]/10;//用+=是因为可能有进位 
		c[i] %= 10;//进位后的实际情况
	}
	while(c[t] != 0){
		c[t+1]+=c[t]/10;
		c[t]%=10;
		t++;
	} 
	while(c[t-1] == 0 and t > 1) t--;
	for(int i = t-1;i >= 0;i--) cout<<c[i];
	return 0;
}
posted @ 2023-07-07 09:51  nasia  阅读(23)  评论(0)    收藏  举报