当前位置:首页C++程序设计 > 正文

c++大整数减法

作者:野牛程序员:2023-06-19 16:21:41C++程序设计阅读 2667

在C++中执行大整数减法可以使用字符串或者自定义数据结构来表示大整数,并按照减法运算规则进行操作。以下是一个使用字符串表示大整数的示例代码:

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

string subtract(string num1, string num2) {
    int len1 = num1.length();
    int len2 = num2.length();
    
    if (len1 < len2) {
        swap(num1, num2);
        swap(len1, len2);
    }
    
    reverse(num1.begin(), num1.end());
    reverse(num2.begin(), num2.end());
    
    string result = "";
    int carry = 0;
    
    for (int i = 0; i < len2; i++) {
        int digit1 = num1[i] - '0';
        int digit2 = num2[i] - '0';
        
        int diff = digit1 - digit2 - carry;
        
        if (diff < 0) {
            diff += 10;
            carry = 1;
        } else {
            carry = 0;
        }
        
        result.push_back(diff + '0');
    }
    
    for (int i = len2; i < len1; i++) {
        int digit = num1[i] - '0' - carry;
        
        if (digit < 0) {
            digit += 10;
            carry = 1;
        } else {
            carry = 0;
        }
        
        result.push_back(digit + '0');
    }
    
    reverse(result.begin(), result.end());
    
    // 移除结果前面的零
    int i = 0;
    while (result[i] == '0' && i < result.length() - 1) {
        i++;
    }
    
    result = result.substr(i);
    
    return result;
}

int main() {
    string num1, num2;
    cout << "输入第一个大整数:";
    cin >> num1;
    cout << "输入第二个大整数:";
    cin >> num2;
    
    string result = subtract(num1, num2);
    cout << "结果:" << result << endl;
    
    return 0;
}

这段代码使用了字符串来表示大整数,并通过从个位到最高位的顺序进行减法运算。首先将两个字符串进行倒序排列,并逐位相减,若结果小于零,则向高位借位。最后再将结果倒序排列,并移除前导零。

请注意,这段代码对输入的合法性没有进行验证,例如输入的字符串是否为合法的数字。在实际应用中,可能需要添加额外的输入验证和错误处理逻辑。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击