对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。C++
时间: 2024-03-08 10:48:00 浏览: 54
C代码实现超长整数字符串 相加,及相应执行程序
好的,以下是基于字符串实现超长整数加减法运算的C++代码:
```c++
#include <iostream>
#include <string>
using namespace std;
string add(string num1, string num2) {
int len1 = num1.length(), len2 = num2.length();
if (len1 < len2) num1 = string(len2-len1, '0') + num1;
else num2 = string(len1-len2, '0') + num2;
string res = "";
int carry = 0;
for (int i = num1.length()-1; i >= 0; i--) {
int sum = (num1[i]-'0') + (num2[i]-'0') + carry;
res = char(sum%10 + '0') + res;
carry = sum/10;
}
if (carry > 0) res = char(carry+'0') + res;
return res;
}
string sub(string num1, string num2) {
int len1 = num1.length(), len2 = num2.length();
if (len1 < len2) num1 = string(len2-len1, '0') + num1;
else num2 = string(len1-len2, '0') + num2;
string res = "";
int borrow = 0;
for (int i = num1.length()-1; i >= 0; i--) {
int diff = (num1[i]-'0') - (num2[i]-'0') - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else borrow = 0;
res = char(diff+'0') + res;
}
while (res.length() > 1 && res[0] == '0') res.erase(0, 1);
if (borrow > 0) res = "-" + res;
return res;
}
int main() {
string num1, num2, op;
cin >> num1 >> op >> num2;
string res;
if (op == "+") res = add(num1, num2);
else if (op == "-") res = sub(num1, num2);
cout << res << endl;
return 0;
}
```
这段代码中,我们定义了两个函数`add`和`sub`,分别用于实现超长整数的加法和减法运算。在主函数中,我们读入两个字符串和运算符,并根据运算符选择调用`add`或`sub`函数进行运算,最后输出结果。
需要注意的是,在`sub`函数中,如果运算结果为负数,我们需要在结果前面添加负号。而在`add`和`sub`函数中,我们都需要将输入的两个超长整数用0补齐到相同的长度,以便进行逐位运算。最后,我们还需要去掉结果中的前导0,以满足题目要求。
希望这段代码能够帮助到你。
阅读全文