一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且定义0的阶乘为1。自然数n的阶乘写作n!。即n!=1×2×3×…×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
下面直接上源码,如计算1000!:
-
#include <stdio.h>
-
-
// result数组的最大长度
-
#define MAX_LEN 4096
-
// result数组,存放阶乘结果
-
int result[MAX_LEN];
-
// result数组的有效长度
-
int len =
0;
-
-
// factorial函数的功能是计算阶乘,结果存在result数组中
-
// 返回值:成功为0,失败为1
-
int factorial(int n)
-
{
-
int value =
0;
-
-
// 初始化result数组及有效长度长度
-
result[
0] =
1;
-
len =
1;
-
-
for(
int i=
1; i<=n; i++)
-
{
-
for(
int j=len
-1; j>=
0; j--)
-
{
-
value = i * result[j];
-
result[j] = value %
10;
-
value = value /
10;
-
-
int k = j +
1;
-
-
// 考虑进位,不增加result数组长度的情况
-
while(value >
0 && k < len)
-
{
-
value = value + result[k];
-
result[k] = value %
10;
-
value = value /
10;
-
k++;
-
}
-
-
// 考虑进位,增加result数组长度的情况
-
while(value >
0)
-
{
-
result[len] = value %
10;
-
value = value /
10;
-
len++;
-
-
if(len > MAX_LEN)
-
{
-
return
1;
-
}
-
}
-
}
-
}
-
-
return
0;
-
}
-
-
int main(void)
-
{
-
for(
int i=
0; i<=
1000; i++)
-
{
-
// 计算阶乘
-
int ret = factorial(i);
-
-
// 计算失败
-
if(ret ==
1)
-
{
-
printf(
"Error! Tooooooo long!!\n");
-
break;
-
}
-
-
// 打印阶乘结果
-
printf(
"%d! = ", i);
-
for(
int j=len
-1; j>=
0; j--)
-
printf(
"%d", result[j]);
-
printf(
"\n");
-
}
-
-
return
0;
-
}
来源:http://www.xieyincai.com/20180921703.html
转载:https://blog.csdn.net/ctrigger/article/details/105147502
查看评论