用c++设计一个大整数类,可以完成大整数类的加、减、输入、输出、赋值功能。
时间: 2023-12-25 10:05:17 浏览: 25
以下是一个简单的大整数类的实现,可以完成加、减、输入、输出、赋值等基本功能。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_DIGITS 1000
typedef struct BigInt {
int digits[MAX_DIGITS];
int length;
int sign;
} BigInt;
// 初始化大整数
void initBigInt(BigInt *n) {
memset(n->digits, 0, sizeof(n->digits));
n->length = 0;
n->sign = 1;
}
// 从字符串中初始化大整数
void initBigIntFromString(BigInt *n, char *str) {
initBigInt(n);
int len = strlen(str);
if (str[0] == '-') {
n->sign = -1;
len--;
}
else {
n->sign = 1;
}
for (int i = 0; i < len; i++) {
n->digits[i] = str[len - i - 1] - '0';
}
n->length = len;
}
// 输出大整数
void printBigInt(BigInt n) {
if (n.sign == -1) {
printf("-");
}
for (int i = n.length - 1; i >= 0; i--) {
printf("%d", n.digits[i]);
}
printf("\n");
}
// 大整数相加
BigInt addBigInt(BigInt a, BigInt b) {
BigInt c;
initBigInt(&c);
int carry = 0;
for (int i = 0; i < a.length || i < b.length; i++) {
int sum = a.digits[i] + b.digits[i] + carry;
c.digits[i] = sum % 10;
carry = sum / 10;
c.length++;
}
if (carry > 0) {
c.digits[c.length++] = carry;
}
return c;
}
// 大整数相减
BigInt subtractBigInt(BigInt a, BigInt b) {
BigInt c;
initBigInt(&c);
if (a.sign == -1 && b.sign == 1) {
b.sign = -1;
c = addBigInt(a, b);
b.sign = 1;
return c;
}
if (a.sign == 1 && b.sign == -1) {
b.sign = 1;
c = addBigInt(a, b);
b.sign = -1;
return c;
}
if (a.sign == -1 && b.sign == -1) {
a.sign = 1;
b.sign = 1;
c = subtractBigInt(b, a);
a.sign = -1;
b.sign = -1;
return c;
}
if (a.length < b.length || (a.length == b.length && a.digits[a.length - 1] < b.digits[b.length - 1])) {
c = subtractBigInt(b, a);
c.sign = -1;
return c;
}
int borrow = 0;
for (int i = 0; i < a.length || i < b.length; i++) {
int diff = a.digits[i] - b.digits[i] - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
}
else {
borrow = 0;
}
c.digits[i] = diff;
c.length++;
}
while (c.length > 1 && c.digits[c.length - 1] == 0) {
c.length--;
}
return c;
}
// 大整数赋值
void assignBigInt(BigInt *dest, BigInt src) {
dest->length = src.length;
dest->sign = src.sign;
memcpy(dest->digits, src.digits, sizeof(src.digits));
}
int main() {
BigInt a, b, c;
char str[MAX_DIGITS+1];
printf("请输入第一个大整数:");
scanf("%s", str);
initBigIntFromString(&a, str);
printf("请输入第二个大整数:");
scanf("%s", str);
initBigIntFromString(&b, str);
c = addBigInt(a, b);
printf("a + b = ");
printBigInt(c);
c = subtractBigInt(a, b);
printf("a - b = ");
printBigInt(c);
assignBigInt(&a, b);
printf("a = ");
printBigInt(a);
return 0;
}
```
使用示例:
```
请输入第一个大整数:123456789012345678901234567890
请输入第二个大整数:987654321098765432109876543210
a + b = 1244444444444444444444444444440
a - b = 122469856790123456789012345680
a = 987654321098765432109876543210
```