C+对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。例如:
时间: 2024-03-10 19:43:20 浏览: 152
好的,我可以帮你实现这个任务。以下是示例代码:
```cpp
#include <iostream>
#include <string>
using namespace std;
string add(string num1, string num2) {
// 将两个数的位数补齐
int len1 = num1.length(), len2 = num2.length();
if (len1 < len2) {
num1 = string(len2 - len1, '0') + num1;
} else {
num2 = string(len1 - len2, '0') + num2;
}
// 从低位到高位逐位相加
string sum = "";
int carry = 0;
for (int i = num1.length() - 1; i >= 0; i--) {
int digit1 = num1[i] - '0';
int digit2 = num2[i] - '0';
int digit_sum = digit1 + digit2 + carry;
if (digit_sum >= 10) {
digit_sum -= 10;
carry = 1;
} else {
carry = 0;
}
sum = char(digit_sum + '0') + sum;
}
if (carry > 0) {
sum = char(carry + '0') + sum;
}
return sum;
}
string subtract(string num1, string num2) {
// 将被减数和减数的位数补齐
int len1 = num1.length(), len2 = num2.length();
if (len1 < len2) {
num1 = string(len2 - len1, '0') + num1;
} else {
num2 = string(len1 - len2, '0') + num2;
}
// 从低位到高位逐位相减
string diff = "";
int borrow = 0;
for (int i = num1.length() - 1; i >= 0; i--) {
int digit1 = num1[i] - '0';
int digit2 = num2[i] - '0';
int digit_diff = digit1 - digit2 - borrow;
if (digit_diff < 0) {
digit_diff += 10;
borrow = 1;
} else {
borrow = 0;
}
diff = char(digit_diff + '0') + diff;
}
// 删除前导零
while (diff.length() > 1 && diff[0] == '0') {
diff.erase(0, 1);
}
return diff;
}
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` 函数计算结果。
阅读全文