本关任务:编写程序,利用C++语言基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。 提示 对于加法,考虑先把两个数对齐,再按位加(要考虑进位),运算结果以字符串形式输出。 对于减法,先比较被减数和减数的大小,如果被减数小于减数,则需要交换被减数和减数,然后再按位减(要考虑借位)。
时间: 2024-03-15 10:44:17 浏览: 74
下面是C++的实现代码:
```c++
#include <iostream>
#include <string>
using namespace std;
string add(string a, string b) {
string res = "";
int carry = 0;
int i = a.length() - 1, j = b.length() - 1;
while (i >= 0 || j >= 0) {
int x = i >= 0 ? a[i] - '0' : 0;
int y = j >= 0 ? b[j] - '0' : 0;
int s = x + y + carry;
res = to_string(s % 10) + res;
carry = s / 10;
i--, j--;
}
if (carry) {
res = to_string(carry) + res;
}
return res;
}
string subtract(string a, string b) {
if (a.length() < b.length() || (a.length() == b.length() && a < b)) {
swap(a, b);
cout << "-";
}
string res = "";
int carry = 0;
int i = a.length() - 1, j = b.length() - 1;
while (i >= 0 || j >= 0) {
int x = i >= 0 ? a[i] - '0' : 0;
int y = j >= 0 ? b[j] - '0' : 0;
int s = x - y - carry;
if (s < 0) {
s += 10;
carry = 1;
} else {
carry = 0;
}
res = to_string(s) + res;
i--, j--;
}
// 去掉前导0
while (res.length() > 1 && res[0] == '0') {
res.erase(res.begin());
}
return res;
}
int main() {
string a, op, b;
cin >> a >> op >> b;
if (op == "+") {
cout << add(a, b) << endl;
} else {
cout << subtract(a, b) << endl;
}
return 0;
}
```
这个程序中,我们定义了两个函数,分别实现加法和减法。在加法函数中,我们从低位开始逐位相加,如果有进位就记录下来,最后将结果反转输出。在减法函数中,我们先判断被减数和减数的大小,然后从低位开始逐位相减,如果需要借位就记录下来,最后添加符号并去掉前导0输出。最后,我们读入两个超长整数和运算符,根据运算符选择相应的函数输出结果。
阅读全文