高精度乘以单精度
由于计算机的基本数据类型如 int
或 long
有其大小限制,当我们需要进行超出这些基本类型范围的计算时,就需要使用大数乘法技术。一种简单的大数乘法算法——单精度乘高精度数算法。这种方法特别适用于将一个大数(用字符串表示)与一个较小的整数相乘。
把迭代过程想象成许多节点的连接,每一个节点拥有的信息数量是相同的。
每当进入一个新的节点,信息变量存储的是上一个节点的信息。利用上一个节点的信息维护当前节点的信息,然后完成我们希望的工作。
这样的好处是明确统一了维护变量的时机----进入节点之后统一维护。
这样就避免了有一些变量在上一节点维护,有一些变量在当前节点维护而造成的混乱。
注意进入下一节点的条件和操作。
static string multiply_1(const string& a, const string& _b) {
// 如果乘数是0或原数是0,直接返回"0"
if (b == 0 || a == "0") return "0";
string c; // 结果字符串
int b = stoi(_b); // 将单精度数字符串转换为整数
int i = a.size() - 1; // 从字符串的最后一个字符开始处理
int carry = 0; // 进位初始化为0
int sum = 0; // 当前位的乘积结果加上进位
while (i >= 0 || sum / 10) { // 当还有数字需要处理或者进位不为0时继续循环
carry = sum / 10; // 更新进位
int num = i >= 0 ? a[i] - '0' : 0; // 获取当前位的数字,如果i小于0则取0
sum =