高精度乘法c语言
时间: 2023-07-09 14:05:02 浏览: 115
高精度乘法指的是两个很大的数相乘时,需要使用数组来存储每一位的数值,并进行手动计算。以下是一个简单的高精度乘法的C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 1000
int ans[MAX_N*2]; // 结果数组
int main() {
char num1[MAX_N], num2[MAX_N];
int len1, len2, i, j;
scanf("%s %s", num1, num2);
len1 = strlen(num1);
len2 = strlen(num2);
// 逆序存储
for (i = 0; i < len1; i++) {
num1[i] -= '0';
}
for (i = 0; i < len2; i++) {
num2[i] -= '0';
}
// 计算乘积
for (i = 0; i < len1; i++) {
int carry = 0;
for (j = 0; j < len2; j++) {
ans[i+j] += num1[i] * num2[j] + carry;
carry = ans[i+j] / 10;
ans[i+j] %= 10;
}
ans[i+len2] += carry;
}
// 去掉前导0
int k = len1 + len2 - 1;
while (k > 0 && ans[k] == 0) {
k--;
}
// 输出结果
for (i = k; i >= 0; i--) {
printf("%d", ans[i]);
}
printf("\n");
return 0;
}
```
该程序使用了一个数组 `ans` 来存储乘积结果,数组长度为两个数位数之和。具体实现中,我们先将两个字符串逆序存储,并将每一位的字符转换为数字。然后按照手算乘法的方法,将每一位相乘的结果加到 `ans` 数组相应的位置上,并进位。最后去掉前导0,将结果输出即可。
阅读全文