编写C++程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。
时间: 2024-02-28 20:57:31 浏览: 109
好的,以下是一个基于字符串实现对超长整数的加法运算和减法运算的 C++ 代码示例:
```c++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string add(string a, string b) {
// 将字符串翻转,方便从低位到高位相加
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
// 用 '0' 补齐两个字符串长度,防止出现下标越界
int len = max(a.size(), b.size());
a += string(len - a.size(), '0');
b += string(len - b.size(), '0');
string ans = "";
int carry = 0;
for (int i = 0; i < len; i++) {
int s = a[i] - '0' + b[i] - '0' + carry;
ans += (s % 10) + '0';
carry = s / 10;
}
// 如果最高位有进位,需要再加一位
if (carry) {
ans += '1';
}
// 将字符串翻转,还原回原来的顺序
reverse(ans.begin(), ans.end());
return ans;
}
string sub(string a, string b) {
// 将字符串翻转,方便从低位到高位相减
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
// 用 '0' 补齐两个字符串长度,防止出现下标越界
int len = max(a.size(), b.size());
a += string(len - a.size(), '0');
b += string(len - b.size(), '0');
string ans = "";
int borrow = 0;
for (int i = 0; i < len; i++) {
int s = a[i] - b[i] - borrow;
if (s < 0) {
s += 10;
borrow = 1;
} else {
borrow = 0;
}
ans += s + '0';
}
// 去掉前导零
while (ans.size() > 1 && ans.back() == '0') {
ans.pop_back();
}
// 将字符串翻转,还原回原来的顺序
reverse(ans.begin(), ans.end());
return ans;
}
int main() {
string a, b;
char op;
cout << "请输入第一个数:";
cin >> a;
cout << "请输入运算符(+ 或 -):";
cin >> op;
cout << "请输入第二个数:";
cin >> b;
if (op == '+') {
cout << "运算结果为:" << add(a, b) << endl;
} else {
cout << "运算结果为:" << sub(a, b) << endl;
}
return 0;
}
```
这个程序和之前给出的 Python3 的实现非常相似,也分别定义了 `add` 和 `sub` 两个函数,用于实现超长整数的加法和减法。不同的是,这里使用了 C++ 标准库中的一些函数,如 `string` 类型、`reverse` 函数、`max` 函数等。
在 `main` 函数中,读入两个超长整数和一个运算符,根据运算符调用 `add` 或 `sub` 函数进行运算,最后输出结果。
您可以将以上代码保存为一个 .cpp 文件,然后在命令行中编译和运行该文件,按照提示输入两个超长整数和一个运算符,即可得到运算结果。
阅读全文