高精度除法--C语言
作者:
浩然正气
,
2024-10-27 19:53:35
,
所有人可见
,
阅读 5
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#define N 100010
// 高精度除法
/*
* a:被除数
* b:除数
* n:被除数的长度
*/
void high_div(int a[], int b, int n) {
int r = 0; // 余数
int index = 0;
int res[N] = {0};
for (int i = 0; i < n; i ++ ) {
r = (r * 10) + a[i];
res[index ++ ] = r / b;
r = r % b;
}
// 去除前导0
// 标记前导0的位置
bool index_zero = true;
for (int i = 0; i < index; i ++ ) {
// 001234或0012034
if (res[i] == 0 && index_zero == true) continue;
else {
// 结束前导0的位置
index_zero = false;
printf("%d", res[i]);
}
}
// 全是0只输出一个零
if (index_zero == true)
printf("0");
printf("\n%d\n", r);
}
int main()
{
int b;
int num[N];
char str[N];
scanf("%s", str);
scanf("%d", &b);
int len = strlen(str);
for (int i = 0; i < len; i ++ )
num[i] = str[i] - '0';
high_div(num, b, len);
return 0;
}