Manchester


私信TA

用户名:wenyajie

访问量:312266

签 名:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

等  级
排  名 1
经  验 62655
参赛次数 1
文章发表 188
年  龄 0
在职情况 学生
学  校 Xiamen University
专  业 计算机科学

  自我简介:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

解题思路:
思路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;
    }
}

别忘点赞哦-.-

 

0.0分

17 人评分

  评论区

第一个方法有问题,应该是i+1
2022-12-20 19:46:13
思路1为什么要先定义jc等于1呢?
2022-02-07 17:35:54
0的阶乘原来是1!
2020-03-06 21:17:45
  • «
  • 1
  • »