编写一个c++程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果 只使用iostream和cstring库
时间: 2024-03-13 08:45:06 浏览: 93
C++中超长数类型的构造与实现
好的,以下是一个基于字符串实现对超长整数的加法运算和减法运算的C++程序,仅使用iostream和cstring库:
```c++
#include <iostream>
#include <cstring>
using namespace std;
// 去掉字符串前导0
string removeLeadingZeros(string num) {
int i = 0;
while (i < num.size() - 1 && num[i] == '0') {
i++;
}
return num.substr(i);
}
// 比较两个字符串表示的整数的大小,返回1表示a大于b,返回-1表示a小于b,返回0表示a等于b
int compare(string a, string b) {
a = removeLeadingZeros(a);
b = removeLeadingZeros(b);
if (a.size() > b.size()) {
return 1;
} else if (a.size() < b.size()) {
return -1;
} else {
for (int i = 0; i < a.size(); i++) {
if (a[i] > b[i]) {
return 1;
} else if (a[i] < b[i]) {
return -1;
}
}
return 0;
}
}
// 实现两个字符串表示的整数的加法
string add(string a, string b) {
int carry = 0;
string res;
int i = a.size() - 1, j = b.size() - 1;
while (i >= 0 || j >= 0 || carry > 0) {
int sum = carry;
if (i >= 0) {
sum += a[i] - '0';
i--;
}
if (j >= 0) {
sum += b[j] - '0';
j--;
}
carry = sum / 10;
sum %= 10;
res = to_string(sum) + res;
}
return res;
}
// 实现两个字符串表示的整数的减法
string subtract(string a, string b) {
string res;
int borrow = 0;
int i = a.size() - 1, j = b.size() - 1;
while (i >= 0 || j >= 0) {
int x = borrow;
if (i >= 0) {
x += a[i] - '0';
i--;
}
if (j >= 0) {
x -= b[j] - '0';
j--;
}
borrow = x < 0 ? -1 : 0;
x = (x + 10) % 10;
res = to_string(x) + res;
}
return removeLeadingZeros(res);
}
int main() {
string a, b, op;
cin >> a >> op >> b;
string res;
if (op == "+") {
res = add(a, b);
} else if (op == "-") {
if (compare(a, b) >= 0) {
res = subtract(a, b);
} else {
res = "-" + subtract(b, a);
}
}
cout << res << endl;
return 0;
}
```
这个程序中,`removeLeadingZeros`函数用于去掉字符串前导0;`compare`函数用于比较两个字符串表示的整数的大小;`add`函数用于实现两个字符串表示的整数的加法;`subtract`函数用于实现两个字符串表示的整数的减法。在主函数中,首先读入两个超长整数和运算符,然后根据运算符进行加法或减法运算,最后输出运算结果。
阅读全文