高精度算法——加、减、乘、除

高精度加法

✅ ~i 就是 i>=0 的简写,很多高精度模板喜欢这么写。

高精度减法

高精度减法「处理前导零」

复制代码
while(lc && C[lc]==0) lc--; //处理前导0

比如计算 1314 - 793 = 521

数组 C 存的是:C[0]=1,C[1]=2,C[2]=5,C[3]=0

lc一开始是 max 长度 = 4,也就是lc=3。

什么是前导零?

正常数字不会写 0521,前面多余的 0 叫前导零。 因为我们数组是倒着存数字:

  • C 下标大的地方,对应数字高位。
  • 高位算完之后,可能残留一堆 0,这些就是前导零。

例子:

复制代码
C[3]=0,C[2]=5,C[1]=2,C[0]=1
数字:0 5 2 1 → 实际是521,高位这个0要删掉

lc代表当前结果的最高位下标。我们输出的时候是从 lc 往 0 倒序打印:

复制代码
for(int i=lc; ~i; i--) printf("%d",C[i]);

如果lc还是 3,就会输出0521,不对。所以要把lc往前移动,跳过高位的 0。

拆解 while 条件 while(lc && C[lc]==0)

while( 条件 ),满足就执行lc--

  1. C[lc]==0:当前最高位是 0,需要去掉
  2. lc:等价于 lc != 0,防止结果是 0 的时候,lc 变成 - 1

比如 1000 - 1000 = 0,数组 C 全部是 0。 如果没有lc这个判断,循环会一直 lc-- 到 - 1,后面循环输出for(i=lc;~i;i--)就炸了。

一句话总结

从最高位开始,不断砍掉高位多余的 0,一直保留到第一个非 0 数字;

如果全部是 0,lc 停在 0,保证最后输出 0。

高精度乘法

处理前导零的情况:当有一个乘数为0的时候

高精度除法

相关推荐
moshuying8 小时前
块扩散 + GDN 改造:Clover 把「并行生成」塞进了 Agent 的长上下文里
前端·算法
没落之王8 小时前
历史系统建模:宋初太祖太宗「再立天庭」秩序重构推演
人工智能·算法·重构
INGNIGHT9 小时前
91 · 最小调整代价(序列dp)
数据结构·算法·leetcode
moshuying9 小时前
扩散模型开始写代码、开网页了:350 亿参数,速度比 Jev 快一倍
前端·算法
小超人诞生日记9 小时前
C++ 异常机制详解:从抛出捕获到异常安全
c++·算法
labuladong10 小时前
机器学习&神经网络 系列教程上线
神经网络·算法·机器学习
xiangyun6110 小时前
C++ 手撕 shared_ptr:引用计数与控制块到底长什么样?
开发语言·c++·算法·面试·stl
学习论之费曼学习法10 小时前
无人值守AI内容矩阵实战(8):标题 A/B 实验的 6 个工程实现细节,隔日对比与自动判胜
人工智能·python·算法·矩阵·自动化·a/b测试·内容矩阵
Carl_奕然10 小时前
【机器视觉】最强算法之:3D高斯泼溅(3D Gaussian Splatting)
人工智能·python·算法·目标检测·计算机视觉·3d
w_zero_one10 小时前
算法--桶思想
java·开发语言·算法