怎么用C + +编高精度
时间: 2023-07-08 15:16:05 浏览: 40
使用C++编写高精度可以通过自定义大整数类来实现。主要思路是将大整数按照数组的形式存储,通过重载运算符来实现加减乘除等运算。
以下是一个简单的大整数类的示例代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 1005;
class BigInteger {
private:
int num[MAXN];
bool sign;
public:
BigInteger() {
memset(num, 0, sizeof(num));
sign = true;
}
BigInteger(string s) {
memset(num, 0, sizeof(num));
if (s[0] == '-') {
sign = false;
s = s.substr(1);
} else {
sign = true;
}
int len = s.length();
for (int i = 0; i < len; i++) {
num[len - i - 1] = s[i] - '0';
}
}
BigInteger operator + (const BigInteger& b) const {
BigInteger res;
res.sign = this->sign;
int carry = 0;
for (int i = 0; i < MAXN; i++) {
res.num[i] = this->num[i] + b.num[i] + carry;
carry = res.num[i] / 10;
res.num[i] %= 10;
}
return res;
}
BigInteger operator - (const BigInteger& b) const {
BigInteger res;
res.sign = this->sign;
int borrow = 0;
for (int i = 0; i < MAXN; i++) {
res.num[i] = this->num[i] - b.num[i] - borrow;
if (res.num[i] < 0) {
res.num[i] += 10;
borrow = 1;
} else {
borrow = 0;
}
}
return res;
}
BigInteger operator * (const BigInteger& b) const {
BigInteger res;
res.sign = (this->sign == b.sign);
for (int i = 0; i < MAXN - 1; i++) {
for (int j = 0; j < MAXN - 1; j++) {
int pos = i + j;
res.num[pos] += this->num[i] * b.num[j];
res.num[pos + 1] += res.num[pos] / 10;
res.num[pos] %= 10;
}
}
return res;
}
BigInteger operator / (const BigInteger& b) const {
BigInteger res, tmp;
res.sign = (this->sign == b.sign);
tmp.sign = true;
int len = this->getLen() - b.getLen();
for (int i = len; i >= 0; i--) {
tmp = tmp * 10;
tmp.num[0] = this->num[i + b.getLen() - 1];
int l = 0, r = 9, mid;
while (l < r) {
mid = (l + r + 1) / 2;
if (tmp >= b * mid) {
l = mid;
} else {
r = mid - 1;
}
}
res.num[i] = l;
tmp = tmp - b * l;
}
return res;
}
bool operator < (const BigInteger& b) const {
if (this->sign != b.sign) {
return !this->sign;
}
for (int i = MAXN - 1; i >= 0; i--) {
if (this->num[i] != b.num[i]) {
return (this->sign) ? (this->num[i] < b.num[i]) : (this->num[i] > b.num[i]);
}
}
return false;
}
int getLen() const {
for (int i = MAXN - 1; i >= 0; i--) {
if (this->num[i] != 0) {
return i + 1;
}
}
return 1;
}
friend ostream& operator << (ostream& out, const BigInteger& b) {
if (!b.sign) {
out << '-';
}
int len = b.getLen();
for (int i = len - 1; i >= 0; i--) {
out << b.num[i];
}
return out;
}
};
int main() {
BigInteger a("12345678901234567890");
BigInteger b("98765432109876543210");
cout << a + b << endl;
cout << a - b << endl;
cout << a * b << endl;
cout << a / b << endl;
return 0;
}
```
该示例代码可以实现大整数的加减乘除等基本运算,可以通过自定义更多的运算符来实现其他运算。