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

高精度加法

✅ ~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的时候

高精度除法

相关推荐
怕浪猫4 小时前
RAG 面试 6 连问,从原理到优化全部覆盖
python·算法·面试
无线通信科研笔记4 小时前
IEEE TVT 2026 论文精读与完整复现|相位误差如何重塑近场 RIS 的幅相响应
论文阅读·人工智能·python·算法·论文笔记
mmmmath_35 小时前
二叉树の递归遍历
算法
All for pursuit.6 小时前
【位运算-1】338.比特位计数
数据结构·c++·算法·leetcode
小师兄吃牛肉6 小时前
C语言中的nullptr有必要吗
c语言·c++·算法
一只小小的芙厨8 小时前
【线性DP】
学习·算法·动态规划
奋发向前wcx8 小时前
CSP-J复赛模拟赛5 王晨旭补题 2026.10.5
算法
罗湖老棍子10 小时前
C Looooops(信息学奥赛一本通- P1640)
算法·数论·同余·裴蜀定理·扩展欧几里得
飘尘12 小时前
从"算子"到"AI Infra":大模型背后看不见的那群人在忙什么
人工智能·算法·面试
夏幻灵13 小时前
每日一题:LeetCode 3:无重复字符的最长子串——滑动窗口思路详解
算法·leetcode·职场和发展