高精度算法入门

高精度算法用于处理超出标准数据类型(如 intlong long)范围的大整数运算。常见应用包括大数加减乘除、阶乘、大数比较等。其核心思想是将大数以数组或字符串形式存储,每一位单独进行运算,并手动处理进位与借位。

基本思想

本质上就是用程序模拟我们列竖式计算的过程。

存储方式

通常采用小端序(低位在数组前端),例如数字 12345 存储为 [5,4,3,2,1],这样从第 0 位开始进位/借位非常方便。

可以使用 vector<int> 或 string

数据处理相关代码

高精度字符串转数组

// 将字符串表示的大数转换为小端序 vector(下标0存个位)
vector<int> strToVec(const string& s) {
    vector<int> v;
    // 从字符串末尾(最低位)开始存储
    for (int i = s.size() - 1; i >= 0; i--) {
        v.push_back(s[i] - '0');
    }
    return v;
}

数组转高精度字符串

// 如果需要返回字符串(便于后续使用)
string vecToStr(const vector<int>& v) {
    string s;
    for (int i = v.size() - 1; i >= 0; i--) {
        s.push_back(v[i] + '0');
    }
    return s;
}