编写C++程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。
时间: 2024-03-10 20:48:31 浏览: 90
下面是一个可能的实现:
```cpp
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string add(string num1, string num2)
{
string res = "";
int carry = 0;
int i = num1.size() - 1, j = num2.size() - 1;
while (i >= 0 || j >= 0)
{
int x = i >= 0 ? num1[i--] - '0' : 0;
int y = j >= 0 ? num2[j--] - '0' : 0;
int sum = x + y + carry;
res += to_string(sum % 10);
carry = sum / 10;
}
if (carry) res += to_string(carry);
reverse(res.begin(), res.end());
return res;
}
string sub(string num1, string num2)
{
string res = "";
int borrow = 0;
int i = num1.size() - 1, j = num2.size() - 1;
while (i >= 0 || j >= 0)
{
int x = i >= 0 ? num1[i--] - '0' : 0;
int y = j >= 0 ? num2[j--] - '0' : 0;
int diff = x - y - borrow;
if (diff < 0)
{
diff += 10;
borrow = 1;
}
else
{
borrow = 0;
}
res += to_string(diff);
}
reverse(res.begin(), res.end());
while (res.size() > 1 && res[0] == '0') res.erase(0, 1);
return res;
}
int main()
{
string num1, num2, res;
char op;
cout << "请输入两个超长整数和运算符(+或-):" << endl;
cin >> num1 >> num2 >> op;
if (op == '+')
{
res = add(num1, num2);
}
else if (op == '-')
{
res = sub(num1, num2);
}
else
{
cout << "无效的运算符" << endl;
return 0;
}
cout << "运算结果为:" << res << endl;
return 0;
}
```
在这个实现中,我们定义了两个函数 `add()` 和 `sub()`,分别用来实现加法和减法。这两个函数的输入和输出都是字符串类型的,方便处理超长整数。
在 `add()` 函数中,我们使用两个指针 `i` 和 `j` 分别指向两个字符串的末尾,从后往前逐位相加,并将结果存储在一个新的字符串 `res` 中。在计算过程中,我们需要记录进位 `carry`。最后,如果进位不为 0,就将它加到结果的最高位上,并将结果翻转后返回。
在 `sub()` 函数中,我们也使用两个指针 `i` 和 `j` 分别指向两个字符串的末尾,从后往前逐位相减,并将结果存储在一个新的字符串 `res` 中。在计算过程中,我们需要记录借位 `borrow`。如果被减数的某一位小于减数的对应位,则需要向高位借位。最后,如果结果的最高位是 0,则将它去掉,并将结果翻转后返回。
在 `main()` 函数中,我们首先读入两个超长整数和运算符 `op`,然后根据运算符调用 `add()` 或 `sub()` 函数进行加法或减法运算。最后输出运算结果。
希望这个实现可以帮助你理解如何基于字符串实现对超长整数的加法和减法运算。
阅读全文