在C语言中,计算一个非负整数的阶乘可以通过递归或循环来实现。以下是一个使用循环来计算阶乘的示例代码,并在代码中添加了注释来解释每一步:
#include <stdio.h>
// 函数声明
unsigned long long factorial(unsigned int n);
int main() {
unsigned int number;
unsigned long long result;
// 提示用户输入一个非负整数
printf("请输入一个非负整数来计算它的阶乘: ");
scanf("%u", &number);
// 计算阶乘
result = factorial(number);
// 输出结果
printf("%u的阶乘是: %llu\n", number, result);
return 0;
}
// 函数定义:计算n的阶乘
unsigned long long factorial(unsigned int n) {
if (n == 0) {
return 1; // 0的阶乘定义为1
}
unsigned long long fact = 1;
for (unsigned int i = 1; i <= n; ++i) {
fact *= i; // 将i乘到fact上,计算阶乘
}
return fact; // 返回计算结果
}
文字讲解:
1. 首先包含了stdio.h头文件,这是为了能够使用printf和scanf函数进行输入输出。
2. 声明了一个factorial函数,它接收一个无符号整数n作为参数,并返回一个无符号长长整型unsigned long long`的结果。这是因为阶乘的结果很快就会超过普通整型变量的范围。
3. 在main函数中,定义了两个变量number和result,分别用于存储用户输入的非负整数和计算得到的阶乘结果。
4. 使用printf函数提示用户输入一个非负整数,并使用scanf函数读取用户输入的值。
5. 调用factorial函数计算用户输入整数的阶乘,并将结果存储在result变量中。
6. 使用printf函数输出计算得到的阶乘结果。
7. factorial函数通过一个循环来计算阶乘,从1开始乘到用户输入的数n。如果输入的是0,则直接返回1,因为0的阶乘定义为1。
8. 最后,factorial函数返回计算得到的阶乘值。
注意:该程序没有进行错误检查,比如用户输入的是否为非负整数。在实际应用中,应该添加适当的错误检查来确保程序的健壮性。此外,对于非常大的数,即使是unsigned long long类型也可能不足以存储阶乘的结果,这种情况下需要使用特殊的大数库来处理。