#94 高精度乘低精度

模板

//C = A * b
vector<int> mul(vector<int>& A, int b) {
	vector<int> C;
	int t = 0;

	for (int i = 0; i < A.size() || t; i++) {
		t += A[i] * b;
		C.push_back(t % 10);
		t /= 10;
	}

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

	return C;
}

思路

1、高精度整数A,低精度整数b,进位t

2、本位计算值 = A[i] * b + t

      本位结果 = (A[i] * b + t)  % 10

      进位 t =   (A[i] * b + t)  / 10

例题

(1)

 输入高精度正整数A(以字符串形式),低精度整数b。

 求A * b,并输出。

#include <iostream>
#include <vector>

using namespace std;

//C = A * b
vector<int> mul(vector<int>& A, int b) {
	vector<int> C;
	int t = 0;

	for (int i = 0; i < A.size() || t; i++) { //A的最高位计算完后若有进位,需追加到C末尾
		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;
	cin >> a >> b;

	vector<int> A;
	for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');
	vector<int> C = mul(A, b);
	for (int i = C.size() - 1; i >= 0; i--) cout << C[i];

	return 0;
}

 

猜你喜欢

转载自blog.csdn.net/Seattle_night/article/details/130036298
94
今日推荐