如何实现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)。
