写一个c++程序,实现超长整数的加减运算
时间: 2024-03-13 12:44:12 浏览: 116
下面是一个基于字符串实现的超长整数加减法的C++示例代码,可以满足上述要求:
```cpp
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
// 去掉字符串前导0
string removeLeadingZeros(string s) {
int i = 0;
while (i < s.length() - 1 && s[i] == '0') {
i++;
}
return s.substr(i);
}
// 超长整数加法
string add(string a, string b) {
reverse(a.begin(), a.end()); // 反转字符串,从低位到高位相加
reverse(b.begin(), b.end());
int carry = 0; // 进位标志
string res; // 结果字符串
for (int i = 0; i < max(a.length(), b.length()); i++) {
int x = i < a.length() ? a[i] - '0' : 0;
int y = i < b.length() ? b[i] - '0' : 0;
int s = x + y + carry;
res += to_string(s % 10);
carry = s / 10;
}
if (carry) {
res += to_string(carry);
}
reverse(res.begin(), res.end()); // 去掉结果字符串的前导0并反转回来
return removeLeadingZeros(res);
}
// 超长整数减法
string subtract(string a, string b) {
reverse(a.begin(), a.end()); // 反转字符串,从低位到高位相减
reverse(b.begin(), b.end());
int borrow = 0; // 借位标志
string res; // 结果字符串
for (int i = 0; i < max(a.length(), b.length()); i++) {
int x = i < a.length() ? a[i] - '0' : 0;
int y = i < b.length() ? b[i] - '0' : 0;
int s = x - y - borrow;
borrow = s < 0 ? 1 : 0; // 有借位时将借位标志设为1
res += to_string((s + 10) % 10); // 加10是为了保证结果为非负数
}
reverse(res.begin(), res.end()); // 去掉结果字符串的前导0并反转回来
res = removeLeadingZeros(res);
if (borrow) {
res = "-" + res; // 如果结果为负数,加上负号
}
return res;
}
// 主程序
int main() {
string a, op, b;
cin >> a >> op >> b;
if (op == "+") {
cout << add(a, b) << endl;
} else if (op == "-") {
cout << subtract(a, b) << endl;
} else {
cout << "Invalid operator" << endl;
}
return 0;
}
```
需要注意的是,在减法运算中,为了处理借位,需要将被减数和减数的相对大小进行比较,如果被减数小于减数,需要将它们交换位置,并在最终结果前加上负号。此外,由于C++的字符串类型不支持直接进行加减运算,需要使用字符转数字的方法进行计算。
阅读全文