用C++写一个高精度乘法程序
时间: 2023-11-08 10:04:18 浏览: 87
好的,以下是一段基于 C 语言的高精度乘法程序的示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
// 将字符串数字逆序存入整型数组中
void str_to_int_array(char* str, int array[]) {
int len = strlen(str);
for (int i = 0; i < len; i++) {
array[i] = str[len - i - 1] - '0';
}
}
// 将整型数组转换为字符串
void int_array_to_str(int array[], int len, char* str) {
for (int i = len - 1; i >= 0; i--) {
str[len - i - 1] = array[i] + '0';
}
str[len] = '\0';
}
// 实现高精度乘法
void multiply(char* a, char* b, char* result) {
int a_len = strlen(a), b_len = strlen(b);
int a_array[MAX_LEN], b_array[MAX_LEN], result_array[MAX_LEN * 2];
memset(a_array, 0, sizeof(a_array));
memset(b_array, 0, sizeof(b_array));
memset(result_array, 0, sizeof(result_array));
str_to_int_array(a, a_array);
str_to_int_array(b, b_array);
for (int i = 0; i < a_len; i++) {
for (int j = 0; j < b_len; j++) {
result_array[i + j] += a_array[i] * b_array[j];
}
}
int len = a_len + b_len;
for (int i = 0; i < len - 1; i++) {
result_array[i + 1] += result_array[i] / 10;
result_array[i] %= 10;
}
while (len > 1 && result_array[len - 1] == 0) {
len--;
}
int_array_to_str(result_array, len, result);
}
int main() {
char a[MAX_LEN], b[MAX_LEN], result[MAX_LEN * 2];
scanf("%s%s", a, b);
multiply(a, b, result);
printf("%s\n", result);
return 0;
}
```
使用时,可以在控制台输入两个大数,并输出它们的乘积。
如:
输入:
```
12345678901234567890 98765432101234567890
```
输出:
```
1219326311370217958886511386112762739003372500415860490000
```
希望能对你有帮助!
阅读全文