C++大数类实现加减功能
时间: 2024-01-10 19:43:50 浏览: 85
以下是一个简单的 C++ 大数类实现,它可以实现大数的加减运算:
```
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
class BigInt {
public:
string num;
BigInt() {}
BigInt(string s) {
num = s;
}
BigInt operator+(BigInt b) {
BigInt res;
int carry = 0;
int len1 = num.length(), len2 = b.num.length();
int len = max(len1, len2);
for (int i = 0; i < len; i++) {
int a = i < len1 ? num[len1 - 1 - i] - '0' : 0;
int b = i < len2 ? b.num[len2 - 1 - i] - '0' : 0;
int sum = a + b + carry;
carry = sum / 10;
sum = sum % 10;
res.num.insert(0, to_string(sum));
}
if (carry) {
res.num.insert(0, to_string(carry));
}
return res;
}
BigInt operator-(BigInt b) {
BigInt res;
int borrow = 0;
int len1 = num.length(), len2 = b.num.length();
int len = max(len1, len2);
for (int i = 0; i < len; i++) {
int a = i < len1 ? num[len1 - 1 - i] - '0' : 0;
int b = i < len2 ? b.num[len2 - 1 - i] - '0' : 0;
int diff = a - b - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
res.num.insert(0, to_string(diff));
}
while (res.num.length() > 1 && res.num[0] == '0') {
res.num.erase(0, 1);
}
return res;
}
void print() {
cout << num << endl;
}
};
int main() {
BigInt a("123456789"), b("987654321");
BigInt c = a + b;
BigInt d = b - a;
c.print(); // 输出 1111111110
d.print(); // 输出 864197532
return 0;
}
```
以上代码实现了 BigInt 类,这个类包含了 num 字符串,用来存储大数。它的构造函数可以接受一个字符串作为参数,用于初始化大数。
类中的 `operator+` 和 `operator-` 分别实现了大数的加法和减法。其中,加法的实现比较简单,使用了竖式加法的思想,从低位开始逐位相加,最后将结果逆序输出即可。减法的实现稍微复杂一些,需要考虑借位的情况。
最后,我们在 `main` 函数中创建了两个大数 a 和 b,分别进行了加法和减法运算,并将结果打印出来。
阅读全文