请用c++设计无符号大数类,能支持无符号大数像普通无符号数一样进行+、-、比较等运算和输出。假定本题大数在200位以内,提示:采用字符串方式输入大数,不要用getline输入,无符号大数内部存放时建议按低位到高位次序存放各位数字,便于无符号大数类扩展到支持乘、除运算。 输入格式: 两个无符号大数 (第一个大数不小于第二个大数),中间用空格、'\t'或'\n'分隔。 输出格式: 输出它们的和、差
时间: 2024-03-07 09:50:24 浏览: 25
以下是用 C++ 设计的无符号大数类,支持加减运算和比较运算:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 205;
class BigInteger {
private:
int len;
int num[MAXN];
public:
BigInteger() {
len = 0;
memset(num, 0, sizeof(num));
}
BigInteger(const char* str) {
len = strlen(str);
memset(num, 0, sizeof(num));
for (int i = 0; i < len; i++) {
num[i] = str[len - i - 1] - '0';
}
}
BigInteger operator+(const BigInteger& rhs) const {
BigInteger ans;
ans.len = max(len, rhs.len);
for (int i = 0; i < ans.len; i++) {
ans.num[i] += num[i] + rhs.num[i];
ans.num[i+1] = ans.num[i] / 10;
ans.num[i] %= 10;
}
if (ans.num[ans.len] != 0) {
ans.len++;
}
return ans;
}
BigInteger operator-(const BigInteger& rhs) const {
BigInteger ans;
ans.len = len;
for (int i = 0; i < ans.len; i++) {
ans.num[i] += num[i] - rhs.num[i];
if (ans.num[i] < 0) {
ans.num[i] += 10;
ans.num[i+1]--;
}
}
while (ans.len > 1 && ans.num[ans.len-1] == 0) {
ans.len--;
}
return ans;
}
bool operator<(const BigInteger& rhs) const {
if (len != rhs.len) {
return len < rhs.len;
}
for (int i = len-1; i >= 0; i--) {
if (num[i] != rhs.num[i]) {
return num[i] < rhs.num[i];
}
}
return false;
}
bool operator>(const BigInteger& rhs) const {
return rhs < *this;
}
bool operator<=(const BigInteger& rhs) const {
return !(rhs < *this);
}
bool operator>=(const BigInteger& rhs) const {
return !(*this < rhs);
}
bool operator==(const BigInteger& rhs) const {
return !(rhs < *this) && !(*this < rhs);
}
bool operator!=(const BigInteger& rhs) const {
return rhs < *this || *this < rhs;
}
friend istream& operator>>(istream& in, BigInteger& x) {
char str[MAXN];
in >> str;
x = BigInteger(str);
return in;
}
friend ostream& operator<<(ostream& out, const BigInteger& x) {
for (int i = x.len-1; i >= 0; i--) {
out << x.num[i];
}
return out;
}
};
int main() {
BigInteger a, b;
cin >> a >> b;
cout << a + b << endl;
cout << a - b << endl;
return 0;
}
```
这里重载了加减运算符和比较运算符,使得我们可以像普通数据类型一样使用加减运算和比较运算。同时,我们还重载了输入输出流运算符,使得我们可以像输入输出普通数据类型一样输入输出大数。