如何实现4位数的高精度计算?

摘要:4.高精度计算 一、高精度算法(仅 C++ 需掌握) 核心背景 Java 有大整数类、Python 默认支持无限大数,C++ 需通过数组模拟大整数运算,适用于位数超 1
4.高精度计算 一、高精度算法(仅 C++ 需掌握) 核心背景 Java 有大整数类、Python 默认支持无限大数,C++ 需通过数组模拟大整数运算,适用于位数超 1e6 位的整数(数值范围远超long long)。 存储规则 逆序存储:将大整数的个位存在数组下标 0 位,高位依次往后存(如 123456 存为[6,5,4,3,2,1]),方便进位 / 借位时在数组末尾操作(避免数组平移)。 1. 高精度加法(A + B,A、B ≥ 0) 思路 模拟人工加法:从个位开始,逐位相加,加上上一位进位,当前位取和的个位(t%10),进位取和的十位(t/10); 处理边界:当 A 或 B 未遍历完时,未存在的位视为 0;遍历结束后若仍有进位,需在结果末尾补 1。 代码模板(结合 PDF 优化) #include <vector> using namespace std; // C = A + B,A、B逆序存储(个位在0位) vector<int> add(vector<int> &A, vector<int> &B) { vector<int> C; int t = 0; // 进位,初始为0 for (int i = 0; i < A.size() || i < B.size(); i++) { if (i < A.size()) t += A[i]; if (i < B.size()) t += B[i]; C.push_back(t % 10); // 当前位结果 t /= 10; // 更新进位 } if (t) C.push_back(1); // 最后仍有进位 return C; } 测试案例 输入:A=11(存储为[1,1]),B=99(存储为[9,9]) 运算过程: 个位:1+9+0=10 → 存 0,进位 1; 十位:1+9+1=11 → 存 1,进位 1; 遍历结束,进位 1 补尾 → 结果[0,1,1],逆序输出为 110。 输出:110 2. 高精度减法(A - B,需满足 A ≥ B,A、B ≥ 0) 讲解思路 预处理:先通过cmp函数判断 A 是否≥B,若 A<B 则计算-(B - A); 模拟人工减法:从个位开始,逐位相减(减去上一位借位),若当前位不够减则借位(+10),借位标记为 1; 去前导零:结果末尾若有连续 0(如 003→3),需删除(保留最后一个 0)。
阅读全文