C++对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。例如
时间: 2024-03-10 14:43:18 浏览: 107
好的,我可以帮你实现这个任务。以下是示例代码:
```cpp
#include <iostream>
#include <string>
using namespace std;
string add(string num1, string num2) {
if (num1.length() > num2.length()) {
swap(num1, num2);
}
string res = "";
int n1 = num1.length(), n2 = num2.length();
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
int carry = 0;
for (int i = 0; i < n1; i++) {
int sum = (num1[i] - '0') + (num2[i] - '0') + carry;
res.push_back(sum % 10 + '0');
carry = sum / 10;
}
for (int i = n1; i < n2; i++) {
int sum = (num2[i] - '0') + carry;
res.push_back(sum % 10 + '0');
carry = sum / 10;
}
if (carry) {
res.push_back(carry + '0');
}
reverse(res.begin(), res.end());
return res;
}
string subtract(string num1, string num2) {
if (num1.length() < num2.length()) {
swap(num1, num2);
}
string res = "";
int n1 = num1.length(), n2 = num2.length();
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
int carry = 0;
for (int i = 0; i < n2; i++) {
int sub = (num1[i] - '0') - (num2[i] - '0') - carry;
if (sub < 0) {
sub += 10;
carry = 1;
} else {
carry = 0;
}
res.push_back(sub + '0');
}
for (int i = n2; i < n1; i++) {
int sub = (num1[i] - '0') - carry;
if (sub < 0) {
sub += 10;
carry = 1;
} else {
carry = 0;
}
res.push_back(sub + '0');
}
reverse(res.begin(), res.end());
while (res.length() > 1 && res[0] == '0') {
res.erase(0, 1);
}
return res;
}
int main() {
string num1, num2;
char op;
cin >> num1 >> num2 >> op;
if (op == '+') {
cout << add(num1, num2) << endl;
} else if (op == '-') {
cout << subtract(num1, num2) << endl;
} else {
cout << "Invalid operator!" << endl;
}
return 0;
}
```
这个程序中,`add` 函数和 `subtract` 函数分别实现了超长整数的加法和减法。这两个函数的输入分别是两个字符串 `num1` 和 `num2`,输出是一个字符串表示的结果。程序中还定义了一个 `main` 函数,用于读入输入并调用 `add` 或 `subtract` 函数计算结果。
阅读全文