以下是一个用C++写的高精度减法的示例代码:

#include <iostream>
#include <vector>
using namespace std;

// 函数用于移除结果前面多余的0
void removeLeadingZeros(vector<int>& num) {
    while (num.size() > 1 && num.back() == 0) {
        num.pop_back();
    }
}

// 高精度减法
vector<int> subtract(vector<int>& num1, vector<int>& num2) {
    int n1 = num1.size();
    int n2 = num2.size();
    vector<int> result(max(n1, n2), 0);
    int carry = 0;
    for (int i = 0; i < result.size(); i++) {
        int digit = (i < n1 ? num1[i] : 0) - (i < n2 ? num2[i] : 0) - carry;
        if (digit < 0) {
            digit += 10;
            carry = 1;
        } else {
            carry = 0;
        }
        result[i] = digit;
    }
    removeLeadingZeros(result);
    return result;
}

int main() {
    string str1, str2;
    cin >> str1 >> str2;

    vector<int> num1, num2;
    for (int i = str1.size() - 1; i >= 0; i--) {
        num1.push_back(str1[i] - '0');
    }
    for (int i = str2.size() - 1; i >= 0; i--) {
        num2.push_back(str2[i] - '0');
    }

    vector<int> result = subtract(num1, num2);

    cout << "Result: ";
    for (int i = result.size() - 1; i >= 0; i--) {
        cout << result[i];
    }
    cout << endl;

    return 0;
}

这段代码中,我们首先定义了一个removeLeadingZeros函数,用于移除结果前面多余的0。然后定义了一个subtract函数,用于执行高精度减法运算。最后在main函数中,我们读取两个输入字符串,并将其转换为高精度数,然后调用subtract函数进行减法运算,最后输出结果。

示例输入和输出:

输入:

123456789012345678901234567890
123456789012345678901234567890

输出:

Result: 0

代码解析:

  1. removeLeadingZeros 函数: 移除结果前面多余的0,确保结果输出简洁。
  2. subtract 函数: 实现高精度减法运算的核心逻辑。
    • 通过两个循环,逐位计算两个高精度数的差值,并处理进位情况。
    • 使用 carry 变量记录进位信息,确保准确的减法运算。
  3. main 函数: 读取输入字符串,转换为高精度数,调用 subtract 函数计算结果,并输出结果。

优化建议:

  1. 为了提高代码可读性和可维护性,可以使用类封装高精度数的操作,方便后续扩展。
  2. 可以添加对负数的支持,使代码更通用。
  3. 可以使用更简洁的算法,例如 Karatsuba 算法,提高运算效率。

通过以上优化,可以构建一个功能强大、易于维护的高精度减法库。

C++ 高精度减法实现详解与示例代码

原文地址: https://www.cveoy.top/t/topic/pZtL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录