写一段C语言用分治法进行大整数乘法的代码
时间: 2024-05-28 22:08:51 浏览: 91
以下是使用分治法进行大整数乘法的C语言代码:
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 10000
void multiply(char *a, char *b, char *result) {
int len_a = strlen(a);
int len_b = strlen(b);
int len_result = len_a + len_b;
int i, j;
// 将a和b的顺序反转
for (i = 0; i < len_a / 2; ++i) {
char temp = a[i];
a[i] = a[len_a - 1 - i];
a[len_a - 1 - i] = temp;
}
for (i = 0; i < len_b / 2; ++i) {
char temp = b[i];
b[i] = b[len_b - 1 - i];
b[len_b - 1 - i] = temp;
}
// 初始化result为0
for (i = 0; i < len_result; ++i) {
result[i] = '0';
}
result[len_result] = '\0';
// 分治法计算乘积
for (i = 0; i < len_a; ++i) {
int carry = 0;
for (j = 0; j < len_b; ++j) {
int temp = (a[i] - '0') * (b[j] - '0') + carry + (result[i + j] - '0');
carry = temp / 10;
result[i + j] = temp % 10 + '0';
}
if (carry > 0) {
result[i + j] += carry;
}
}
// 去掉前导0
i = len_result - 1;
while (i >= 0 && result[i] == '0') {
--i;
}
if (i < 0) {
result[0] = '0';
result[1] = '\0';
} else {
result[i + 1] = '\0';
}
// 将result反转
len_result = strlen(result);
for (i = 0; i < len_result / 2; ++i) {
char temp = result[i];
result[i] = result[len_result - 1 - i];
result[len_result - 1 - i] = temp;
}
}
int main() {
char a[MAX_LENGTH], b[MAX_LENGTH], result[MAX_LENGTH * 2];
printf("请输入两个大数:\n");
scanf("%s%s", a, b);
multiply(a, b, result);
printf("乘积为:%s\n", result);
return 0;
}
阅读全文