【六十一】【算法分析与设计】高精度乘法和高精度除法

本文详细介绍了高精度乘法和除法算法,涉及单精度乘以高精度数、大数乘法(长乘法/列乘法)的实现,以及如何用字符串表示大数进行精确计算,包括乘法中的迭代过程和除法中的余数处理。

高精度乘以单精度

由于计算机的基本数据类型如 intlong 有其大小限制,当我们需要进行超出这些基本类型范围的计算时,就需要使用大数乘法技术。一种简单的大数乘法算法——单精度乘高精度数算法。这种方法特别适用于将一个大数(用字符串表示)与一个较小的整数相乘。

把迭代过程想象成许多节点的连接,每一个节点拥有的信息数量是相同的。

每当进入一个新的节点,信息变量存储的是上一个节点的信息。利用上一个节点的信息维护当前节点的信息,然后完成我们希望的工作。

这样的好处是明确统一了维护变量的时机----进入节点之后统一维护。

这样就避免了有一些变量在上一节点维护,有一些变量在当前节点维护而造成的混乱。

注意进入下一节点的条件和操作。

 
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 =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妖精七七_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值