编写c++程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。对于减法,先比较被减数和减数的大小,如果被减数小于减数,则需要交换被减数和减数,然后再按位减(要考虑借位)。 对于减法运算,如果运算结果为负数要在前面加上负号
时间: 2024-03-16 15:41:58 浏览: 62
好的,我可以为您提供一个基于字符串实现超长整数加法和减法的 C++ 程序。代码如下:
```c++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string add(string num1, string num2)
{
// 将 num1 和 num2 的长度调整为相等
int len1 = num1.size(), len2 = num2.size();
if (len1 < len2)
{
num1 = string(len2 - len1, '0') + num1;
len1 = len2;
}
else
{
num2 = string(len1 - len2, '0') + num2;
len2 = len1;
}
// 从低位到高位逐位相加并进位
string res(len1, '0');
int carry = 0;
for (int i = len1 - 1; i >= 0; i--)
{
int sum = num1[i] - '0' + num2[i] - '0' + carry;
res[i] = sum % 10 + '0';
carry = sum / 10;
}
if (carry) res = '1' + res;
return res;
}
string sub(string num1, string num2)
{
// 比较 num1 和 num2 的大小,如果 num1 < num2,则交换 num1 和 num2
int len1 = num1.size(), len2 = num2.size();
if (len1 < len2 || (len1 == len2 && num1 < num2))
{
swap(num1, num2);
swap(len1, len2);
}
// 从低位到高位逐位相减并借位
string res(len1, '0');
int borrow = 0;
for (int i = len1 - 1; i >= 0; i--)
{
int diff = num1[i] - '0' - (i >= len1 - len2 ? num2[i - len1 + len2] - '0' : 0) - borrow;
if (diff < 0)
{
diff += 10;
borrow = 1;
}
else
{
borrow = 0;
}
res[i] = diff + '0';
}
// 去掉前导零
int pos = res.find_first_not_of('0');
if (pos != string::npos) return res.substr(pos);
else return "0";
}
int main()
{
string num1, num2, res;
char op;
cin >> num1 >> op >> num2;
if (op == '+')
{
res = add(num1, num2);
}
else if (op == '-')
{
res = sub(num1, num2);
if (num1 < num2) res = '-' + res;
}
cout << res << endl;
return 0;
}
```
该程序中,add() 函数实现了超长整数的加法,sub() 函数实现了超长整数的减法。在 add() 函数中,先将 num1 和 num2 的长度调整为相等,然后从低位到高位逐位相加并进位。最后将结果去掉前导零后返回。在 sub() 函数中,先比较 num1 和 num2 的大小,如果 num1 < num2,则交换 num1 和 num2。然后从低位到高位逐位相减并借位,最后将结果去掉前导零后返回。如果 num1 < num2,则在结果前面加上负号。
在 main() 函数中,先读入两个超长整数和运算符,然后根据运算符调用相应的函数进行加减法运算,并输出结果。
希望这个程序能够帮到您!
阅读全文