【C++学习第四天】(2)高精度乘低精度

本文介绍了两种不同方法实现高精度(vector<int>)与低精度(int)整数乘法的算法,包括逐位运算和处理进位的步骤,提供了mul_1和mul_2函数的代码示例。
摘要由CSDN通过智能技术生成

一、算法原理

A是高精度,数据类型是vector<int>,b是低精度,数据类型是int。算法过程为:从A的低位开始,每一位与b相乘,第 i 位的进位用 t[i] 表示,第 i 位的结果用C[i]表示,其中

t[i+1] = (A[i] * b + t[i]) / 10;

C[i] = (A[i] * b + t[i]) % 10。

二、代码

//C = A * b,A >= 0, b >= 0
vector<int> mul_1(vector<int> &A, int b){
	int t = 0, rst = 0;
	vector<int> C;
	for(int i = 0; i < A.size(); i++){
		rst = A[i] * b + t;
		C.push_back(rst % 10);
		t = rst / 10;
	}
	if(t)
		C.push_back(t);
	return C;
}

vector<int> mul_2(vector<int> &A, int b){
	int t = 0;
	vector<int> C;
	for(int i = 0; i < A.size() || t; i++){
		if(i < A.size())
			t += A[i] * b;
		C.push_back(t % 10);
		t /= 10;
	}
	return C;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值