用c++写一个高精度除以高精度算法
时间: 2023-05-11 07:07:32 浏览: 125
好的,以下是一个用 C 语言实现的高精度除法算法:
```c
#include <stdio.h>
#include <string.h>
#define MAXN 1000
struct bign {
int d[MAXN], len;
bign() {
memset(d, 0, sizeof(d));
len = 0;
}
};
bign change(char str[]) {
bign a;
a.len = strlen(str);
for (int i = 0; i < a.len; i++) {
a.d[i] = str[a.len - i - 1] - '0';
}
return a;
}
int compare(bign a, bign b) {
if (a.len > b.len) return 1;
else if (a.len < b.len) return -1;
else {
for (int i = a.len - 1; i >= 0; i--) {
if (a.d[i] > b.d[i]) return 1;
else if (a.d[i] < b.d[i]) return -1;
}
return 0;
}
}
bign sub(bign a, bign b) {
bign c;
for (int i = 0; i < a.len || i < b.len; i++) {
if (a.d[i] < b.d[i]) {
a.d[i+1]--;
a.d[i] += 10;
}
c.d[c.len++] = a.d[i] - b.d[i];
}
while (c.len - 1 >= 1 && c.d[c.len - 1] == 0) {
c.len--;
}
return c;
}
bign div(bign a, int b, int &r) {
bign c;
c.len = a.len;
for (int i = a.len - 1; i >= 0; i--) {
r = r * 10 + a.d[i];
if (r < b) c.d[i] = 0;
else {
c.d[i] = r / b;
r %= b;
}
}
while (c.len - 1 >= 1 && c.d[c.len - 1] == 0) {
c.len--;
}
return c;
}
void print(bign a) {
for (int i = a.len - 1; i >= 0; i--) {
printf("%d", a.d[i]);
}
}
int main() {
char str[MAXN];
int b, r = 0;
scanf("%s %d", str, &b);
bign a = change(str);
bign c = div(a, b, r);
print(c);
printf(" %d", r);
return 0;
}
```
这个算法可以实现高精度除以一个整数的功能,输入一个字符串和一个整数,输出商和余数。
阅读全文