对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成1C++
时间: 2024-03-08 19:48:44 浏览: 66
C代码实现超长整数字符串 相加,及相应执行程序
好的,下面是一个用C++实现超长整数的加法和减法的代码示例:
```c++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string add(string a, string b) {
int n = a.size(), m = b.size();
if (n < m) return add(b, a);
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
string res;
int carry = 0;
for (int i = 0; i < n; i++) {
int x = a[i] - '0';
int y = i < m ? b[i] - '0' : 0;
int sum = x + y + 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 sub(string a, string b) {
int n = a.size(), m = b.size();
if (n < m) return "-" + sub(b, a);
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
string res;
int carry = 0;
for (int i = 0; i < n; i++) {
int x = a[i] - '0';
int y = i < m ? b[i] - '0' : 0;
int diff = x - y - carry;
if (diff < 0) {
diff += 10;
carry = 1;
} else {
carry = 0;
}
res.push_back(diff + '0');
}
while (res.size() > 1 && res.back() == '0') res.pop_back();
reverse(res.begin(), res.end());
return res;
}
int main() {
string a, b, op;
cin >> a >> op >> b;
if (op == "+") {
cout << add(a, b) << endl;
} else {
cout << sub(a, b) << endl;
}
return 0;
}
```
这里我们用了 `string` 类型来表示超长整数,然后模拟了加法和减法的过程。对于加法,我们从低位向高位逐位相加,同时考虑进位。对于减法,我们也是从低位向高位逐位相减,同时考虑借位。最后还要注意一些细节,比如处理负数和去掉前导0等。
阅读全文