C++对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成1
时间: 2024-02-28 14:57:08 浏览: 110
用C++实现长整数的输入输出
好的,我知道你的问题了。对于你的问题,我的回答是:请问您有什么具体的问题需要我回答或者需要我帮忙解决吗?如果您需要我帮忙解决,我可以为您提供以下的C++代码实现:
```
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string add(string a, string b) {
string res = "";
int carry = 0;
for (int i = a.size() - 1, j = b.size() - 1; i >= 0 || j >= 0 || carry; i--, j--) {
int x = i >= 0 ? a[i] - '0' : 0;
int y = j >= 0 ? b[j] - '0' : 0;
int sum = x + y + carry;
res += to_string(sum % 10);
carry = sum / 10;
}
reverse(res.begin(), res.end());
return res;
}
string sub(string a, string b) {
string res = "";
int carry = 0;
int i = a.size() - 1, j = b.size() - 1;
while (i >= 0 || j >= 0) {
int x = i >= 0 ? a[i] - '0' : 0;
int y = j >= 0 ? b[j] - '0' : 0;
int diff = x - y - carry;
if (diff < 0) {
diff += 10;
carry = 1;
} else {
carry = 0;
}
res += to_string(diff);
i--, j--;
}
reverse(res.begin(), res.end());
while (res.size() > 1 && res[0] == '0') {
res.erase(res.begin());
}
if (carry == 1) {
res = "-" + res;
}
return res;
}
int main() {
string a, b, op;
cin >> a >> op >> b;
if (op == "+") {
cout << add(a, b) << endl;
} else if (op == "-") {
cout << sub(a, b) << endl;
}
return 0;
}
```
这段代码实现了输入两个非负的超长整数和运算符,输出它们的加法或减法的结果。其中,`add`函数实现了两个超长整数的加法,`sub`函数实现了两个超长整数的减法。请注意,减法的结果可能为负数,需要在输出前面加上负号。在输出结果时,需要去掉前导0。
阅读全文