用C语言程序使用数组完成两个超长(长度小于100)正整数的乘法。
时间: 2024-03-20 14:42:47 浏览: 27
以下是使用 C 语言实现两个超长正整数相乘的示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 105
void multiply(char num1[], char num2[], char res[]) {
int len1 = strlen(num1);
int len2 = strlen(num2);
int arr1[MAX_LEN] = {0};
int arr2[MAX_LEN] = {0};
int res_arr[MAX_LEN * 2] = {0};
// 将两个数倒序存入数组
for (int i = 0; i < len1; i++) {
arr1[i] = num1[len1 - i - 1] - '0';
}
for (int i = 0; i < len2; i++) {
arr2[i] = num2[len2 - i - 1] - '0';
}
// 计算乘积并存入结果数组
for (int i = 0; i < len1; i++) {
for (int j = 0; j < len2; j++) {
res_arr[i + j] += arr1[i] * arr2[j];
}
}
// 处理进位
int carry = 0;
for (int i = 0; i < len1 + len2; i++) {
res_arr[i] += carry;
carry = res_arr[i] / 10;
res_arr[i] %= 10;
}
// 去掉前导零并将结果倒序输出
int i = len1 + len2 - 1;
while (i > 0 && res_arr[i] == 0) {
i--;
}
for (int j = i; j >= 0; j--) {
res[len1 + len2 - j - 1] = res_arr[j] + '0';
}
res[len1 + len2] = '\0';
}
int main() {
char num1[MAX_LEN], num2[MAX_LEN], res[MAX_LEN * 2];
printf("请输入两个正整数:\n");
scanf("%s %s", num1, num2);
multiply(num1, num2, res);
printf("两数的乘积为:%s\n", res);
return 0;
}
```
该程序首先定义了一个 `multiply` 函数,用于计算两个正整数的乘积。函数中定义了三个数组 `arr1`、`arr2` 和 `res_arr`,分别用于存储两个正整数和它们的乘积。函数首先将两个正整数倒序存入数组中,然后使用两层循环计算乘积并存入结果数组中。接着,处理进位并去掉前导零,最后将结果倒序输出。
在 `main` 函数中,程序先读入两个正整数,然后调用 `multiply` 函数计算它们的乘积,并将结果输出。