用整型数组表示10进制大整数(超过2^32的整数),数组的每个元素存储大整数的一位数字,实现大整数的加减法。c++
时间: 2024-03-18 10:39:12 浏览: 20
以下是 C++ 的实现,其中假设数组的最高位存储在数组的第一个元素,数组的长度为 len,数组名为 num:
```c++
const int MAX_LEN = 10000; // 数组的最大长度
int num[MAX_LEN] = {0}; // 数组初始化为0
// 大整数加法
void add(int a[], int b[], int len1, int len2) {
int carry = 0;
for(int i = 0; i < len1 || i < len2; i++) {
int sum = carry;
if(i < len1) sum += a[i];
if(i < len2) sum += b[i];
a[i] = sum % 10;
carry = sum / 10;
}
if(carry > 0) {
a[len1] = carry;
}
}
// 大整数减法
bool sub(int a[], int b[], int len1, int len2) {
bool isNegative = false;
if(len1 < len2) {
isNegative = true;
} else if(len1 == len2) {
int i = len1 - 1;
while(i >= 0 && a[i] == b[i]) {
i--;
}
if(i < 0) {
return false;
}
if(a[i] < b[i]) {
isNegative = true;
}
}
int borrow = 0;
for(int i = 0; i < len1 || i < len2; i++) {
int diff = borrow;
if(i < len1) diff += a[i];
if(isNegative) diff -= b[i];
else if(i < len2) diff -= b[i];
if(diff < 0) {
borrow = -1;
diff += 10;
} else {
borrow = 0;
}
a[i] = diff;
}
while(len1 > 0 && a[len1-1] == 0) {
len1--;
}
return isNegative;
}
```
使用方法:
```c++
int main() {
// 两个大整数相加
int a[MAX_LEN] = {0};
int b[MAX_LEN] = {0};
int len1, len2;
// 读入 a 和 b,并分别存储在数组 a 和 b 中,len1 和 len2 为数组的长度
add(a, b, len1, len2);
// 输出结果,数组 a 存储的即为相加后的大整数
// 两个大整数相减
int a[MAX_LEN] = {0};
int b[MAX_LEN] = {0};
int len1, len2;
// 读入 a 和 b,并分别存储在数组 a 和 b 中,len1 和 len2 为数组的长度
bool isNegative = sub(a, b, len1, len2);
if(isNegative) {
// 输出结果,数组 b 存储的即为相减后的大整数,且为负数
} else {
// 输出结果,数组 a 存储的即为相减后的大整数,且为非负数
}
return 0;
}
```