构思
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 =</