c++带符号的大整数相减
时间: 2023-12-06 22:34:41 浏览: 96
大整数减法 c++ 代码
C++中可以使用字符串来表示大整数,然后通过模拟手算的方式实现大整数的加减乘除等运算。对于带符号的大整数相减,可以先判断两个数的符号是否相同,如果相同,则将它们的绝对值相减,并将结果的符号设置为被减数的符号;如果不同,则将它们的绝对值相加,并将结果的符号设置为被减数的符号。具体实现可以参考以下步骤:
1. 判断两个数的符号是否相同,如果相同则执行步骤2,否则执行步骤3。
2. 将两个数的绝对值相减,得到结果的绝对值,然后将结果的符号设置为被减数的符号。
3. 将两个数的绝对值相加,得到结果的绝对值,然后将结果的符号设置为被减数的符号。
下面是一个简单的C++代码实现:
```
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string subtract(string a, string b) {
string result;
int sign = 1;
if (a[0] == '-') {
sign = -1;
a = a.substr(1);
}
if (b[0] == '-') {
sign = -sign;
b = b.substr(1);
}
if (a.length() < b.length() || (a.length() == b.length() && a < b)) {
swap(a, b);
sign = -sign;
}
int carry = 0;
for (int i = a.length() - 1, j = b.length() - 1; i >= 0; i--, j--) {
int x = a[i] - '0';
int y = j >= 0 ? b[j] - '0' : 0;
int z = x - y - carry;
if (z < 0) {
z += 10;
carry = 1;
} else {
carry = 0;
}
result += z + '0';
}
reverse(result.begin(), result.end());
while (result.length() > 1 && result[0] == '0') {
result.erase(0, 1);
}
if (sign == -1 && result != "0") {
result = "-" + result;
}
return result;
}
int main() {
string a = "-12345678901234567890";
string b = "9876543210123456789";
string c = subtract(a, b);
cout << c << endl; // 输出:-22222222111358024679
return 0;
}
```
阅读全文