c语言编写题目:读入n,m,输出 n!∗m!.(1<=n,m<=100) 结果的位数不超过400. 提示:定义一个数组a[400],定义乘法运算,每次乘法结果用数组保存输入: 输入仅一行,有两个数n,m.输入格式:scanf("%d %d",&n,&m); 输出: 输出仅一行,为题目所要求的答案.最后换行. 输出格式:printf("%d",a[i]); printf("\n");
时间: 2024-03-12 12:43:02 浏览: 134
以下是 C 语言编写的程序代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_DIGITS 400
void multiply(int a[], int b) {
int carry = 0;
for (int i = 0; i < MAX_DIGITS; i++) {
int product = a[i] * b + carry;
a[i] = product % 10;
carry = product / 10;
}
}
void print_result(int a[]) {
int i;
for (i = MAX_DIGITS - 1; i >= 0; i--) {
if (a[i] != 0) break;
}
if (i == -1) {
printf("0\n");
} else {
for (; i >= 0; i--) {
printf("%d", a[i]);
}
printf("\n");
}
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
int a[MAX_DIGITS];
memset(a, 0, sizeof(a));
a[0] = 1;
for (int i = 2; i <= n; i++) {
multiply(a, i);
}
for (int i = 2; i <= m; i++) {
multiply(a, i);
}
print_result(a);
return 0;
}
```
程序逻辑:
- 定义一个大小为 400 的数组 `a`,用于存储大数乘法的结果;
- 读入 `n` 和 `m`;
- 将数组 `a` 的所有元素初始化为 0,将 `a[0]` 初始化为 1;
- 循环计算 `n!`,将结果存储在数组 `a` 中;
- 循环计算 `m!`,将结果存储在数组 `a` 中;
- 输出乘积的结果,即 `n! * m!`。
其中,大数乘法的实现方式为竖式乘法,具体过程为:对于数组 `a` 中的每一个元素,都将其与乘数 `b` 相乘,并将进位传递到下一个元素中。注意,由于 `n` 和 `m` 都不超过 100,因此数组 `a` 最多只需要存储 200 位数字。
阅读全文