用c++编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。
时间: 2024-03-14 17:47:54 浏览: 62
好的,那我给你提供一份C++代码,实现超长整数的加减运算。请注意,这里的加减运算只适用于非负整数。
```c++
#include <iostream>
#include <cstring>
using namespace std;
int main() {
string a, b, ans;
char op;
cin >> a >> op >> b;
int len1 = a.length(), len2 = b.length();
if (len1 < len2 || (len1 == len2 && a < b)) {
swap(a, b);
swap(len1, len2);
}
int carry = 0;
for (int i = 1; i <= len1; i++) {
int x = a[len1 - i] - '0';
int y = i <= len2 ? b[len2 - i] - '0' : 0;
int z = op == '+' ? x + y + carry : x - y - carry;
if (op == '+')
carry = z / 10;
else
carry = z < 0 ? 1 : 0;
ans += (z % 10 + '0');
}
if (carry)
ans += (carry + '0');
while (ans.length() > 1 && ans[ans.length() - 1] == '0')
ans.pop_back();
if (op == '-' && carry)
ans += '-';
reverse(ans.begin(), ans.end());
cout << ans << endl;
return 0;
}
```
这个代码中,我们首先读入两个字符串和运算符,然后比较两个字符串的长度,将较长的字符串放在a中,较短的字符串放在b中。然后按照从低位到高位的顺序一位一位地进行加减运算,并将结果存入ans中。最后,我们需要去掉ans中的前导0,并输出ans。
需要注意的是,如果是减法运算,我们在结果前面加上负号的时候,需要判断最高位是否有进位,如果有进位,需要在负号前加上一个0。
阅读全文