对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输
时间: 2023-07-20 08:36:39 浏览: 51
下面是一份 C++ 的代码实现,可以实现超长整数的加法和减法:
```c++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string add(string num1, string num2) {
// 使 num1 为较长的字符串
if (num1.length() < num2.length()) {
swap(num1, num2);
}
int carry = 0;
string result = "";
int i = num1.length() - 1;
int j = num2.length() - 1;
while (i >= 0 || j >= 0 || carry > 0) {
int n1 = i >= 0 ? num1[i] - '0' : 0;
int n2 = j >= 0 ? num2[j] - '0' : 0;
int sum = n1 + n2 + carry;
carry = sum / 10;
result = to_string(sum % 10) + result;
i--;
j--;
}
return result;
}
string subtract(string num1, string num2) {
int sign = 1;
// 使 num1 为较大的数(或相等)
if (num1.length() < num2.length()) {
swap(num1, num2);
sign = -1;
} else if (num1.length() == num2.length() && num1 < num2) {
swap(num1, num2);
sign = -1;
}
int borrow = 0;
string result = "";
int i = num1.length() - 1;
int j = num2.length() - 1;
while (i >= 0 || j >= 0) {
int n1 = i >= 0 ? num1[i] - '0' : 0;
int n2 = j >= 0 ? num2[j] - '0' : 0;
int diff = n1 - n2 - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
result = to_string(diff) + result;
i--;
j--;
}
// 去掉前导0
while (result.length() > 1 && result[0] == '0') {
result.erase(0, 1);
}
if (sign == -1) {
result = "-" + result;
}
return result;
}
int main() {
string num1, num2;
char op;
cin >> num1 >> op >> num2;
string result;
if (op == '+') {
result = add(num1, num2);
} else {
result = subtract(num1, num2);
}
cout << result << endl;
return 0;
}
```
在上述代码中,我们使用了 string 类型来存储超长整数,利用自定义的函数实现了加法和减法运算。对于减法,我们需要判断被减数和减数的大小,以及运算结果的正负性。最后,我们需要去掉运算结果的前导0。
阅读全文