高精度乘法c语言
时间: 2023-07-09 15:05:02 浏览: 47
以下是一个简单的高精度乘法的C语言实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000 // 数字最大长度
// 高精度乘法函数
void multiply(char a[], char b[], char res[]) {
int len_a = strlen(a);
int len_b = strlen(b);
int len_res = len_a + len_b;
int i, j, k;
// 初始化结果数组为0
for (i = 0; i < len_res; i++) {
res[i] = '0';
}
res[len_res] = '\0';
// 从个位开始逐位相乘并累加到结果数组中
for (i = len_a - 1; i >= 0; i--) {
int carry = 0;
for (j = len_b - 1; j >= 0; j--) {
int tmp = (a[i] - '0') * (b[j] - '0') + (res[i + j + 1] - '0') + carry;
carry = tmp / 10;
res[i + j + 1] = tmp % 10 + '0';
}
res[i] += carry;
}
// 去掉前导0
i = 0;
while (res[i] == '0') {
i++;
}
if (i == len_res) {
res[0] = '0';
res[1] = '\0';
} else {
for (j = 0, k = i; k <= len_res; j++, k++) {
res[j] = res[k];
}
}
}
int main() {
char a[MAX_LEN], b[MAX_LEN], res[MAX_LEN * 2];
printf("Please enter two numbers:\n");
scanf("%s%s", a, b);
multiply(a, b, res);
printf("The result is: %s\n", res);
return 0;
}
```
该实现使用了一个字符数组来存储高精度数,其中每个字符代表一个数字位。在乘法过程中,从个位开始逐位相乘,并将结果累加到结果数组中。最后去掉结果数组的前导0即可。请注意,本实现并没有考虑负数的情况。