C++高精度除法代码
时间: 2023-01-11 14:55:36 浏览: 116
下面是一个 C 高精度除法的代码示例。请注意,这是一个最简单的实现,因此可能不太高效。
```
#include <stdio.h>
#include <string.h>
#define MAX_LEN 200
// 将 num1 / num2 的商和余数分别存储到 result 和 mod 中
void divide(char *num1, char *num2, char *result, char *mod) {
int num1_len = strlen(num1);
int num2_len = strlen(num2);
int result_len = 0;
// 初始化 result 和 mod
memset(result, 0, MAX_LEN);
memset(mod, 0, MAX_LEN);
strcpy(mod, num1);
// 循环直到 mod 小于 num2 为止
while (strcmp(mod, num2) >= 0) {
// 对 mod 执行减法
int borrow = 0;
for (int i = num2_len - 1; i >= 0; i--) {
mod[i] -= borrow + (num2[i] - '0');
if (mod[i] < '0') {
mod[i] += 10;
borrow = 1;
} else {
borrow = 0;
}
}
// 将 mod 中的数字去除前导零
int first_non_zero = 0;
while (mod[first_non_zero] == '0' && first_non_zero < num1_len - 1) {
first_non_zero++;
}
for (int i = 0; i < num1_len - first_non_zero; i++) {
mod[i] = mod[i + first_non_zero];
}
for (int i = num1_len - first_non_zero; i < num1_len; i++) {
mod[i] = '0';
}
// 将商加一
result_len = strlen(result);
int carry = 1;
for (int i = result_len - 1; i >= 0; i--) {
result[i] += carry;
if (result[i] > '9') {
result[i] -= 10;
carry = 1;
} else {
carry = 0;
break;
}
}
}
}
int main() {
char num1[MAX_LEN];
char num2[MAX_LEN];
char result[MAX_LEN];
char mod[MAX_LEN];
// 读入 num1 和 num2
scanf("%s", num1
阅读全文