大整数除法 代码量最少 C语言 用数组实现 有注释
时间: 2024-01-21 13:41:35 浏览: 128
以下是一个用数组实现的大整数除法的C语言代码,注释详细:
```c
#include <stdio.h>
#include <string.h>
#define MAXN 1000 // 数组最大长度,可根据实际情况调整
char str1[MAXN], str2[MAXN]; // 存储输入的两个大整数
int num1[MAXN], num2[MAXN], ans[MAXN]; // num1和num2分别存储两个大整数,ans存储结果
int main() {
scanf("%s %s", str1, str2); // 输入两个大整数
int len1 = strlen(str1), len2 = strlen(str2); // 分别计算两个大整数的长度
for (int i = 0; i < len1; i++) num1[i] = str1[len1 - i - 1] - '0'; // 将字符串转化为数组
for (int i = 0; i < len2; i++) num2[i] = str2[len2 - i - 1] - '0';
int len = len1 - len2 + 1; // 计算商的长度
for (int i = len - 1; i >= 0; i--) { // 从高位到低位计算每一位的商
int t = 0; // t用于存储当前的余数
while (t < 10 && memcmp(num1 + i, num2, len2) >= 0) { // 在num1的第i位到第i+len2-1位之间减去num2,直到小于num2或者减了10次
for (int j = i; j < i + len2; j++) num1[j] -= num2[j - i];
t++;
}
ans[i] = t; // 记录商的当前位
if (t == 0) len--; // 如果该位上的商为0,则不计入结果长度
}
if (len <= 0) printf("0"); // 特判结果为0的情况
else {
for (int i = len - 1; i >= 0; i--) printf("%d", ans[i]); // 输出结果
}
return 0;
}
```
这个算法的时间复杂度大约是O(n^2),其中n是两个大整数的长度之差。在实际应用中可能会有更加高效的算法,但是这个算法在代码实现上比较简单易懂。
阅读全文