输入一个整数m(0<m<=5000) 输出m的阶乘,并在输出结束之后输入一个换行符,用数据结构的思想c语言
时间: 2024-10-08 20:04:06 浏览: 33
在C语言中,计算阶乘通常使用循环或者递归的方式来实现,这里我们可以使用循环来避免递归带来的栈溢出风险。为了使用数据结构的思想,可以引入一个数组来存储中间结果,避免直接相乘导致数值过大溢出整型范围。下面是代码示例:
```c
#include <stdio.h>
#define MAX_FACT 5000 // 设置最大阶乘值
// 功能:计算并返回n的阶乘,利用数组存储中间结果
unsigned long long factorial(int m) {
unsigned long long fact[MAX_FACT + 1] = {1}; // 初始化阶乘数组
for (int i = 1; i <= m; ++i) {
fact[i] = fact[i - 1] * i; // 逐次更新阶乘值
}
return fact[m];
}
int main() {
int m;
printf("请输入一个整数m (0 < m <= 5000): ");
scanf("%d", &m); // 输入整数
if (m >= 0 && m <= 5000) {
unsigned long long result = factorial(m);
printf("%llu\n", result); // 输出结果并换行
} else {
printf("输入错误,m的值应满足0 < m <= 5000.\n");
}
return 0;
}
```
在这个代码中,我们使用了一个动态大小的`fact`数组来存储计算过程中的中间结果,然后在主函数中读取用户输入的`m`,如果在范围内,则计算并输出阶乘;否则给出错误提示。
阅读全文