解题思路:
思路1.根据公式n!=1*2*3*...n;

#include <stdio.h>
int main()
{

int n,jc=1;
scanf("%d",&n);

for(int i=1;i<=n;i++)
  jc*=i;

 printf("%d",jc);
return 0;
}

思路2.用递归根据以下公式

2017-12-23 21-54-29屏幕截图.png

#include <stdio.h>
int fjc( int n );


int main()
{
    int n;
    scanf( "%d", &n );
    printf( "%d", fjc( n ) );
    return(0);
}


int fjc( int n )
{
    if ( n == 0 )
        return(1);
    else
        return(fjc( n - 1 ) * n);
}

思路3.大数据方法,详解见  1148题:求1977!

#include <stdio.h>
int    jc[5660] = { 0 };
int    weishu = 1;
void function( int i );
/*-------------------------------------------------------*/

int main()
{
    jc[0] = 1;
    int n;
    scanf("%d",&n);
    for ( int i = 2; i <= n; i++ )
        function( i );

    for ( int i = weishu - 1; i >= 0; i-- )
        printf( "%d", jc[i] );

    return(0);
}

/*-------------------------------------------------------*/
void function( int i )
{
    int jinwei;
    for ( int j = 0; j < weishu; j++ )
        jc[j] *= i;

    for ( int j = 0; j < weishu; j++ )
    {
        if ( jc[j] / 10 && (j == weishu - 1) )
            weishu++;
        jc[j + 1]    += jc[j] / 10;
        jc[j]        %= 10;
    }
}

别忘点赞哦-.-

点赞(18)
 

0.0分

15 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 8 条评论

橘黄色日落 1年前 回复TA
@橘黄色日落 @dotcpp0633627 你去试一下就知道了
鸡蛋味爆米花 1年前 回复TA
@橘黄色日落 应该不是吧。。这样就变成(n+1)的阶乘了吧。
鸡蛋味爆米花 1年前 回复TA
@格温之死 因为公式n=1*2*。。。所以先定义jc=1
橘黄色日落 1年前 回复TA
第一个方法有问题,应该是i+1
格温之死 2年前 回复TA
思路1为什么要先定义jc等于1呢?
LBD西瓜泥 3年前 回复TA
@煮酒老麦 什么意思
煮酒老麦 4年前 回复TA
@煮酒老麦 幸福的家庭(正数个家庭)总是相似(有限种可能),不幸福的家庭(负数个家庭)各有各的不幸(无穷大种可能),单身狗(0个家庭)的排列组合永远为1。
煮酒老麦 4年前 回复TA
0的阶乘原来是1!