用整型数组表示10进制大整数(超过2^32的整数),数组的每个元素存储大整数的一位数字,实现大整数的加减法。用c语言
时间: 2024-03-17 22:47:53 浏览: 23
实现大整数的加减法,可以分为以下几个步骤:
1. 定义一个结构体,存储大整数的长度和每一位数字,如下所示:
```
#define MAX_LEN 1000
typedef struct {
int len;
int num[MAX_LEN];
} BigInt;
```
2. 实现大整数的输入函数,将输入的字符串转化为BigInt结构体:
```
void str2BigInt(char* str, BigInt* num) {
int i, j;
int len = strlen(str);
num->len = (len + 8) / 9; // 一位数字存储9个字符
memset(num->num, 0, sizeof(num->num));
for (i = len - 1, j = 0; i >= 0; i -= 9, j++) {
int k, t = 1;
for (k = 0; k < 9 && i - k >= 0; k++) {
num->num[j] += (str[i-k] - '0') * t;
t *= 10;
}
}
while (num->len > 1 && num->num[num->len - 1] == 0) num->len--;
}
```
3. 实现大整数的输出函数,将BigInt结构体转化为字符串:
```
void BigInt2str(BigInt* num, char* str) {
int i, j;
for (i = num->len - 1, j = 0; i >= 0; i--, j += 9) {
int k, t = 1000000000;
for (k = 0; k < 9; k++) {
str[j+k] = num->num[i] / t % 10 + '0';
t /= 10;
}
}
str[j] = '\0';
}
```
4. 实现大整数的加法函数:
```
void addBigInt(BigInt* num1, BigInt* num2, BigInt* res) {
int i;
memset(res->num, 0, sizeof(res->num));
for (i = 0; i < num1->len || i < num2->len; i++) {
int sum = num1->num[i] + num2->num[i] + res->num[i];
res->num[i] = sum % 1000000000;
res->num[i+1] = sum / 1000000000;
}
res->len = i;
if (res->num[res->len] > 0) res->len++;
}
```
5. 实现大整数的减法函数:
```
int cmpBigInt(BigInt* num1, BigInt* num2) {
if (num1->len > num2->len) return 1;
if (num1->len < num2->len) return -1;
int i;
for (i = num1->len - 1; i >= 0; i--) {
if (num1->num[i] > num2->num[i]) return 1;
if (num1->num[i] < num2->num[i]) return -1;
}
return 0;
}
void subBigInt(BigInt* num1, BigInt* num2, BigInt* res) {
int i;
memset(res->num, 0, sizeof(res->num));
for (i = 0; i < num1->len || i < num2->len; i++) {
int diff = num1->num[i] - num2->num[i] - res->num[i] + 1000000000;
res->num[i] = diff % 1000000000;
res->num[i+1] = diff / 1000000000 - 1;
}
res->len = i;
while (res->len > 1 && res->num[res->len - 1] == 0) res->len--;
}
```
6. 实现大整数的加减法,具体实现可以根据符号分别调用加法或减法函数:
```
void addSubBigInt(BigInt* num1, BigInt* num2, BigInt* res, char op) {
if (op == '+') {
addBigInt(num1, num2, res);
} else if (op == '-') {
if (cmpBigInt(num1, num2) >= 0) {
subBigInt(num1, num2, res);
} else {
subBigInt(num2, num1, res);
res->len = -res->len;
}
}
}
```
完整代码如下:
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)