设计一个最大存储200位整数的大正整数类LPInteger;并编写主函数对你编写的正整数类LPInteger进行测试。 要求输入的数据不超过200位,输出该大正整数并且输出该大正整数的位数。
时间: 2024-05-08 09:15:10 浏览: 79
由于200位整数超出了C++内置数据类型的范围,我们需要使用字符串来表示这个大正整数。具体实现如下:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class LPInteger {
private:
char digits[201];
public:
LPInteger() {
memset(digits, '0', sizeof(digits));
}
LPInteger(const char* str) {
memset(digits, '0', sizeof(digits));
int len = strlen(str);
for (int i = 0; i < len; i++) {
digits[200 - len + i] = str[i]; // 从高位到低位存储
}
}
LPInteger operator+(const LPInteger& other) const {
LPInteger result;
int carry = 0;
for (int i = 200; i >= 0; i--) { // 从低位到高位相加
int sum = digits[i] - '0' + other.digits[i] - '0' + carry;
result.digits[i] = sum % 10 + '0';
carry = sum / 10;
}
return result;
}
void print() const {
int i = 0;
while (digits[i] == '0' && i < 200) i++; // 忽略前导0
cout << (i == 200 ? "0" : &digits[i]) << endl; // 如果是0,输出一个0,否则输出去掉前导0的数字串
}
int length() const {
int i = 0;
while (digits[i] == '0' && i < 200) i++; // 忽略前导0
return 200 - i + 1; // 200减去去掉前导0的数字串的起始位置再加1就是位数
}
};
int main() {
char a[201], b[201];
cin >> a >> b;
LPInteger x(a), y(b);
(x + y).print();
cout << (x + y).length() << endl;
return 0;
}
```
在这个实现中,我们使用一个长度为201的字符数组来存储大正整数。为了方便运算,我们把这个数组看成一个长度为200的数字串,从高位到低位存储。这样,我们就可以方便地实现加法运算。为了输出这个大正整数和位数,我们还实现了print和length两个成员函数,其中print用来输出去掉前导0的数字串,length用来计算位数。最后,我们在主函数中输入两个大正整数,并输出它们的和以及位数。
阅读全文