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-01-14 07:04:17 浏览: 42
好的,我知道了。下面是C语言的代码实现:
```c
#include <stdio.h>
#include <string.h>
void multiply(int a[], int n)
{
int carry = 0; // 进位
for (int i = 0; i < 400; i++)
{
int temp = carry + a[i] * n;
a[i] = temp % 10;
carry = temp / 10;
}
}
int main()
{
int n, m;
int a[400] = {1}; // 初始化为 1
scanf("%d %d", &n, &m);
for (int i = 2; i <= n; i++)
{
multiply(a, i);
}
for (int i = 2; i <= m; i++)
{
multiply(a, i);
}
int i;
for (i = 399; i >= 0; i--)
{
if (a[i] != 0)
{
break;
}
}
for (int j = i; j >= 0; j--)
{
printf("%d", a[j]);
}
printf("\n");
return 0;
}
```
我们定义了一个 `multiply` 函数,用于实现数组与整数的乘法运算。然后,我们初始化一个长度为 400 的数组 `a`,并将其初始化为 1。接着,我们分别计算 `n!` 和 `m!`,并将结果存入数组 `a` 中。最后,我们从数组的最高位开始遍历,找到第一个不为 0 的数,然后输出该数及其之前的所有数。
注意,这里我们通过判断数组中最高位的数字来确定结果的位数,因为数组中除了前面几位,其余位都可能为 0。
如果还有其他问题,请继续提问。
阅读全文