用C++作答。设计一个求两个大整数四则运算的类。要求如下。 (1)类中私有数据成员为2个运算数及位数、运算结果。 (2)公有成员函数包括:构造函数和析构函数;接收数据的函数;和函数;差函数; 积函数;除函数;显示函数;清零函数等。 程序运行结果如下所示: Please enter one: 1234567 please enter two: 2345678 one+two=3580245 one-two=-1111111 one*two=2895896651426 one/two=52631742743
时间: 2023-06-17 07:07:08 浏览: 52
以下是实现上述功能的C++代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class BigNum {
private:
char num1[1000], num2[1000], result[1000];
int len1, len2, lenr;
public:
BigNum() {
len1 = len2 = lenr = 0;
memset(num1, 0, sizeof(num1));
memset(num2, 0, sizeof(num2));
memset(result, 0, sizeof(result));
}
~BigNum() {}
void input() {
cout << "Please enter one: ";
cin >> num1;
len1 = strlen(num1);
cout << "Please enter two: ";
cin >> num2;
len2 = strlen(num2);
}
void add() {
int i = len1 - 1, j = len2 - 1, k = 0, carry = 0;
while (i >= 0 || j >= 0) {
int x = i >= 0 ? num1[i] - '0' : 0;
int y = j >= 0 ? num2[j] - '0' : 0;
int sum = x + y + carry;
result[k++] = sum % 10 + '0';
carry = sum / 10;
i--; j--;
}
if (carry) result[k++] = carry + '0';
lenr = k;
}
void sub() {
int i = len1 - 1, j = len2 - 1, k = 0, borrow = 0;
while (i >= 0 || j >= 0) {
int x = i >= 0 ? num1[i] - '0' : 0;
int y = j >= 0 ? num2[j] - '0' : 0;
int diff = x - y - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
result[k++] = diff + '0';
i--; j--;
}
while (k > 1 && result[k - 1] == '0') k--;
lenr = k;
}
void mul() {
int i, j, k, carry = 0;
for (k = 0; k < len1 + len2; k++) {
result[k] = '0';
}
for (i = 0; i < len1; i++) {
for (j = 0; j < len2; j++) {
int x = num1[i] - '0';
int y = num2[j] - '0';
int z = x * y + carry + result[i + j] - '0';
result[i + j] = z % 10 + '0';
carry = z / 10;
}
while (carry) {
int z = carry + result[i + j] - '0';
result[i + j] = z % 10 + '0';
carry = z / 10;
j++;
}
}
k = len1 + len2 - 1;
while (k > 1 && result[k] == '0') k--;
lenr = k + 1;
}
void div() {
int i, j, k;
for (i = 0; i < len1; i++) {
result[i] = num1[i];
}
result[len1] = '\0';
lenr = len1;
while (lenr > 0) {
for (k = 0; k < 10; k++) {
if (strcmp(result, num2) < 0) break;
sub();
}
result[lenr] = '0';
lenr++;
for (i = lenr - 1; i >= 1; i--) {
result[i] = result[i - 1];
}
result[0] = k + '0';
if (result[lenr - 1] == '0') lenr--;
}
}
void display() {
cout << "one+two=";
for (int i = lenr - 1; i >= 0; i--) {
cout << result[i];
}
cout << endl;
}
void clear() {
len1 = len2 = lenr = 0;
memset(num1, 0, sizeof(num1));
memset(num2, 0, sizeof(num2));
memset(result, 0, sizeof(result));
}
};
int main() {
BigNum num;
num.input();
num.add();
num.display();
num.clear();
num.input();
num.sub();
num.display();
num.clear();
num.input();
num.mul();
num.display();
num.clear();
num.input();
num.div();
num.display();
return 0;
}
```
上述代码实现了大整数的加减乘除四则运算,并且可以在控制台中输入两个大整数进行运算,并输出结果。
相关推荐
![](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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)