用C语言写一个n的阶乘
时间: 2024-09-30 17:11:17 浏览: 24
在C语言中,你可以使用循环来计算一个数n的阶乘。阶乘是一个正整数n的所有小于等于它的正整数的积。下面是一个简单的递归和非递归版本的n阶乘计算程序:
**非递归版本(使用for循环)**:
```c
#include <stdio.h>
unsigned long long factorial(int n) {
if (n == 0 || n == 1)
return 1; // 阶乘的基础情况
unsigned long long result = 1;
for (int i = 2; i <= n; ++i) {
result *= i;
}
return result;
}
int main() {
int n;
printf("请输入一个正整数:");
scanf("%d", &n);
printf("该数字的阶乘是:%llu\n", factorial(n));
return 0;
}
```
**递归版本**:
```c
#include <stdio.h>
#include <limits.h> // 引入ULLONG_MAX避免溢出
unsigned long long factorial(int n) {
if (n == 0 || n == 1)
return 1;
return n * factorial(n - 1); // 递归调用
}
// 如果n的值过大,可能导致溢出,因此添加检查防止这种情况
int main() {
int n;
printf("请输入一个正整数:");
scanf("%d", &n);
if (n > ULLONG_MAX / factorial(1)) { // 检查是否超出范围
printf("阶乘结果超出了long long的最大值。\n");
} else {
printf("该数字的阶乘是:%llu\n", factorial(n));
}
return 0;
}
```
请注意,对于非常大的n,递归版本可能会导致栈溢出,而非递归版本则不会有这个问题。此外,递归版本需要包含`<limits.h>`库以获取`ULLONG_MAX`来避免溢出问题。
阅读全文