c++实现超大整数的乘法

本文介绍了一种通过将超大整数每9位分成一段,利用c++现有的小于UINT32_MAX的乘法能力,通过分段相乘和加法来实现超大整数乘法的方法。该方法主要依赖于高效的超长整数加法实现,并通过在末尾添加零来扩展乘法范围。虽然简单,但关键在于如何有效处理数字拆分和加法操作。
摘要由CSDN通过智能技术生成

构思

c++已实现因数不大于UINT32_MAX(42949 67295)的乘法,故而可以将超大整数每9位分成一段,然后循环分段相乘,再在末尾填零,然后再做加和。这里就仅需要实现超长整数的加法。
例如,某人只能完成至多127*127的乘法,128*127他就不会算。但是加法能力充分高,十进制数末尾加零的意义也能理解,那么对于129*110223,转换成(127+2)(100000+23+10200)=a+b+c+d+……,这样就不会超过127*127,也符合他加法和加零的能力限制。
这个方案主要的优点是思路比较简单,难点仅在于实现加法和拆数字。十进制数末尾加零仅仅是个字符串操作。

代码

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
//UINT32_MAX = 42949 67295

class BigInt;

//实现字符串超长整数的加法
class Addend {
   
	friend BigInt;
public:
	Addend():m_str("0") {
   };
	Addend(const string& a) {
    m_str = a; }
	Addend(uint64_t src, size_t offset) {
   
		m_str = to_string(src);
		for (size_t i = 0; i < offset; ++i) {
   
			m_str.push_back('0');
		}
	}
	void clear() {
   
		m_str.clear();
	}
	const Addend &add(Addend& sum, const Addend& other) const {
   
		sum.clear();
		Addend lesser;
		const auto* bigger = this;
		const auto sz_other = other.m_str.size();
		const auto sz =</
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值