生成一个高精度C模板
时间: 2023-02-17 18:22:37 浏览: 61
以下是一个简单的高精度 C 模板,它实现了基本的加、减、乘、除运算:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 1000
// 高精度整数结构体
typedef struct {
int len; // 整数长度
int num[MAX_LEN]; // 整数数组
} bign;
// 将字符串转换为高精度整数
bign trans(char* str) {
bign a;
a.len = strlen(str);
for (int i = 0; i < a.len; i++) {
a.num[i] = str[a.len - 1 - i] - '0';
}
return a;
}
// 高精度整数加法
bign add(bign a, bign b) {
bign c;
c.len = 0;
int g = 0;
for (int i = 0; g != 0 || i < (a.len > b.len ? a.len : b.len); i++) {
int x = g;
if (i < a.len) x += a.num[i];
if (i < b.len) x += b.num[i];
c.num[c.len++] = x % 10;
g = x / 10;
}
return c;
}
// 高精度整数减法
bign sub(bign a, bign b) {
bign c;
c.len = 0;
for (int i = 0; i < a.len; i++) {
c.num[i] = a.num[i] - b.num[i];
if (c.num[i] < 0) {
c.num[i] += 10;
a.num[i + 1]--;
}
}
c.len = a.len;
while (c.len - 1 >= 1 && c.num[c.len - 1] == 0) c.len--;
return c;
}
// 高精度整数乘法
bign mul(bign a, bign b) {
bign c;
c.len = a.len + b.len;
for (int i = 0; i < c.len; i++) c.num[i] = 0;
for (int i = 0; i < a.len; i++) {
for (int j = 0; j < b.len; j++) {
c.num[i + j] += a.num[i] * b.num[j];
}
}