帮我写段C语言代码,用整型数组表示10进制大整数(超过2^32的整数),数组的每个元素存储大整数的一位数字,实现大整数的加减法。
时间: 2024-06-03 09:09:07 浏览: 79
好的,以下是代码:
// 定义一个结构体表示大整数
typedef struct {
int digits[1000]; // 数组存储每一位数字
int len; // 数组长度,即大整数的位数
} BigInt;
// 初始化大整数
void initBigInt(BigInt *num) {
memset(num->digits, 0, sizeof(num->digits)); // 将数组中的每个元素都赋值为0
num->len = 0; // 初始时,数组长度为0
}
// 将整数转换为大整数
void intToBigInt(BigInt *num, int n) {
initBigInt(num); // 初始化大整数
while (n) {
num->digits[num->len++] = n % 10; // 将n的每一位数字存储到num的数组中
n /= 10;
}
}
// 比较两个大整数的大小,如果num1大于num2,返回1,如果num1等于num2,返回0,否则返回-1
int compareBigInt(BigInt num1, BigInt num2) {
if (num1.len > num2.len) return 1;
if (num1.len < num2.len) return -1;
for (int i = num1.len - 1; i >= 0; i--) {
if (num1.digits[i] > num2.digits[i]) return 1;
if (num1.digits[i] < num2.digits[i]) return -1;
}
return 0;
}
// 大整数加法
BigInt addBigInt(BigInt num1, BigInt num2) {
BigInt sum; // 存储两个大整数的和
initBigInt(&sum); // 初始化和
int carry = 0; // 进位
for (int i = 0; i < num1.len || i < num2.len; i++) {
int s = num1.digits[i] + num2.digits[i] + carry; // 计算当前位的和
sum.digits[sum.len++] = s % 10; // 将和的当前位存储到sum的数组中
carry = s / 10; // 计算进位
}
if (carry) { // 如果有进位,将进位存储到sum的数组中
sum.digits[sum.len++] = carry;
}
return sum;
}
// 大整数减法
BigInt subtractBigInt(BigInt num1, BigInt num2) {
BigInt diff; // 存储两个大整数的差
initBigInt(&diff); // 初始化差
int borrow = 0; // 借位
for (int i = 0; i < num1.len || i < num2.len; i++) {
int d = num1.digits[i] - borrow - num2.digits[i]; // 计算当前位的差
if (d < 0) { // 如果需要借位
d += 10;
borrow = 1;
} else {
borrow = 0;
}
diff.digits[diff.len++] = d; // 将差的当前位存储到diff的数组中
}
while (diff.len > 1 && diff.digits[diff.len - 1] == 0) { // 去掉前导零
diff.len--;
}
return diff;
}
阅读全文