对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写一个C++程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。
时间: 2024-03-17 22:46:49 浏览: 77
好的,以下是一个基于字符串实现的超长整数加减法运算的 C++ 程序。
```
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
// 对两个超长整数进行加减运算
string add_or_sub(string num1, string num2, char op) {
// 将两个字符串翻转
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
// 确定循环次数
int length = max(num1.length(), num2.length());
// 补全两个字符串,使其长度相等
num1.append(length - num1.length(), '0');
num2.append(length - num2.length(), '0');
// 进位标志
int carry = 0;
// 存储结果的字符串
string result = "";
// 循环计算
for (int i = 0; i < length; i++) {
int temp;
if (op == '+') {
// 加法运算
temp = num1[i] - '0' + num2[i] - '0' + carry;
} else {
// 减法运算
temp = num1[i] - '0' - num2[i] + carry;
}
if (temp >= 10) {
// 如果结果大于等于10,则需要进位
carry = 1;
temp -= 10;
} else if (temp < 0) {
// 如果结果小于0,则需要借位
carry = -1;
temp += 10;
} else {
carry = 0;
}
result += to_string(temp);
}
if (carry == 1) {
// 如果最后一次运算需要进位,则在结果字符串最后添加一个1
result += '1';
}
// 将结果字符串翻转
reverse(result.begin(), result.end());
// 去掉前导0
while (result.length() > 1 && result[0] == '0') {
result.erase(0, 1);
}
// 如果是减法运算,并且结果小于0,则在结果前面添加一个负号
if (op == '-' && num1.compare(num2) < 0) {
result = '-' + result;
}
return result;
}
int main() {
string num1, num2;
char op;
cin >> num1 >> op >> num2;
string result = add_or_sub(num1, num2, op);
cout << result << endl;
return 0;
}
```
您可以将此代码复制到您的 C++ 编辑器中进行测试。
阅读全文