C++算法题 # 9 高精度乘法

给定两个非负整数(不含前导 0) A 和 B,请你计算 A×B 的值。

输入格式
共两行,第一行包含整数 A,第二行包含整数 B。

输出格式
共一行,包含 A×B 的值。

数据范围
1≤A的长度≤100000,
0≤B≤10000
输入样例:

2
3

输出样例:

6

思路
这里因为B是一个小的int型变量,所以这里计算乘法算式时,只需要考虑A的每一位与B进行相乘然后进位和取余保留当前位的值,和加法类似。

代码示例

#include <iostream>
#include <vector>
using namespace std;

vector<int> mul(vector<int> A, int b)
{
	vector<int> C;
	
	for (int i = 0, t = 0; i < A.size() || t; i ++)//这里的t代表的是到高位后需要退出,即低一位的计算没有进位
	{
		if (i < A.size()) t += A[i] * b;
		
		C.push_back(t % 10);
		
		t /= 10;
	}	

	while (C.size() > 1 && C.back() == 0) C.pop_back();
	
	return C;
	
	
}

int main()
{
	string a;
	int b;
	vector<int> A;
	cin >> a >> b;
	
	for (int i = a.size() - 1; i >= 0; i --) A.push_back(a[i] - '0');
	
	auto C = mul(A, b);
	
	for (int i = C.size() - 1; i >= 0; i --) cout << C[i];
	
	return 0;
	
}