c++设计一个最大存储200位整数的大正整数类LPInteger;并编写主函数对你编写的正整数类LPInteger进行测试。 要求输入的数据不超过200位,输出该大正整数并且输出该大正整数的位数。 用户输入的数据中含有非数字的字符时,给出出错提示。
时间: 2024-05-20 22:17:19 浏览: 19
大正整数类LPInteger的设计:
1. 使用一个char类型的数组存储大正整数,数组大小为201(包括一个'\0')。
2. 使用一个int类型的变量记录大正整数的位数。
3. 构造函数:初始化数组为全0,位数为0。
4. 输入函数:从标准输入流中读取一个字符串,判断每个字符是否为数字,如果是则存入数组,更新位数;如果不是数字则输出错误提示。
5. 输出函数:从数组中倒序遍历,遇到第一个非0数字则输出该数字和后面的所有数字,每10位数字输出一个空格,最后输出位数。
6. 操作符重载:加法、减法、乘法、除法、取模。
主函数的测试:
1. 创建两个LPInteger对象,分别输入两个正整数。
2. 对两个对象进行加法、减法、乘法、除法、取模操作,输出结果。
3. 对一个对象进行自增、自减操作,输出结果。
4. 对两个对象进行比较操作,输出结果。
相关问题
设计一个最大存储200位整数的大正整数类LPInteger;并编写主函数对你编写的正整数类LPInteger进行测试。 要求输入的数据不超过200位,输出该大正整数并且输出该大正整数的位数。
由于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用来计算位数。最后,我们在主函数中输入两个大正整数,并输出它们的和以及位数。
用c++编写代码,定义一个求两个整数的和的函数,并在主函数中调用。
好的,以下是代码实现:
```c++
#include <iostream>
using namespace std;
int sum(int x, int y) { // 定义求和函数
return x + y;
}
int main() {
int a = 10, b = 20;
int result = sum(a, b); // 调用求和函数
cout << "The sum of " << a << " and " << b << " is " << result << endl;
return 0;
}
```
运行结果为:
```
The sum of 10 and 20 is 30
```
以上代码中,我们定义了一个求和函数 `sum`,它接受两个整数参数,并返回它们的和。在主函数中,我们声明了两个变量 `a` 和 `b`,并将它们的值分别设为 10 和 20。接着,我们调用 `sum` 函数,将 `a` 和 `b` 作为参数传递进去,并将返回值存储在变量 `result` 中。最后,我们使用 `cout` 输出计算结果。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)