C++对于超长整数的加减运算
时间: 2023-07-11 12:56:28 浏览: 181
C++原生的整数类型无法处理超长整数,需要使用高精度算法来进行加减运算。可以使用字符串来表示超长整数,然后实现字符串的加减法运算。也可以使用数组来存储整数的每一位,然后实现数组的加减法运算。这些算法可以自己实现,也可以使用已有的高精度库,比如GMP(GNU Multiple Precision Arithmetic Library)。
相关问题
C++对于超长整数的加减运算代码
以下是使用字符串实现超长整数加减法的示例代码:
```c++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string add(string a, string b) {
string res;
int carry = 0;
int i = a.size() - 1, j = b.size() - 1;
while (i >= 0 || j >= 0) {
int x = i >= 0 ? a[i--] - '0' : 0;
int y = j >= 0 ? b[j--] - '0' : 0;
int sum = x + y + carry;
carry = sum / 10;
res += to_string(sum % 10);
}
if (carry) res += to_string(carry);
reverse(res.begin(), res.end());
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 = i >= 0 ? a[i--] - '0' : 0;
int y = j >= 0 ? b[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());
return res;
}
int main() {
string a = "12345678901234567890";
string b = "98765432109876543210";
string c = add(a, b);
string d = subtract(a, b);
cout << c << endl; // 输出:111111111111111111100
cout << d << endl; // 输出:-86419732076543209820
return 0;
}
```
以上代码实现了使用字符串表示超长整数的加减法运算。其中,add函数实现了两个超长整数的加法运算,subtract函数实现了两个超长整数的减法运算。需要注意的是,减法运算的结果可能为负数,需要特殊处理。
c++超长整数的加减运算
C++中可以使用string来存储超长整数,并且可以通过自定义函数实现加减运算。下面是一个简单的示例代码:
```c++
#include <iostream>
#include <string>
using namespace std;
string add(string num1, string num2) {
string result = ""; // 保存结果
int carry = 0; // 进位标志
int i = num1.size() - 1; // num1的最高位
int j = num2.size() - 1; // num2的最高位
while (i >= 0 || j >= 0 || carry > 0) {
int n1 = i >= 0 ? num1[i--] - '0' : 0;
int n2 = j >= 0 ? num2[j--] - '0' : 0;
int sum = n1 + n2 + carry;
carry = sum / 10;
result = to_string(sum % 10) + result;
}
return result;
}
string subtract(string num1, string num2) {
string result = ""; // 保存结果
int borrow = 0; // 借位标志
int i = num1.size() - 1; // num1的最高位
int j = num2.size() - 1; // num2的最高位
while (i >= 0 || j >= 0) {
int n1 = i >= 0 ? num1[i--] - '0' : 0;
int n2 = j >= 0 ? num2[j--] - '0' : 0;
int diff = n1 - n2 - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
result = to_string(diff) + result;
}
// 去掉前导0
while (result.size() > 1 && result[0] == '0') {
result.erase(0, 1);
}
return result;
}
int main() {
string num1 = "123456789012345678901234567890";
string num2 = "987654321098765432109876543210";
cout << add(num1, num2) << endl;
cout << subtract(num1, num2) << endl;
return 0;
}
```
上述代码实现了超长整数的加减运算,其中使用了string类型存储超长整数,利用循环逐位相加/相减并处理进/借位。需要注意的是,减法需要判断被减数是否小于减数,若小于则需要向高位借位。对于减法的结果,需要去掉前导0。
阅读全文