PAT练习基础编程题目之简单阶乘计算

简单阶乘计算

导语:宝剑锋从磨砺出 梅花香自苦寒来
- 本题要求实现一个计算非负整数阶乘的简单函数。
- 函数接口定义:
int Factorial( const int N );
其中N是用户传入的参数,其值不超过12。如果N是非负整数,则该函数必须返回N的阶乘,否则返回0。

#include <stdio.h>
int Factorial( const int N );
int main()
{
    int N, NF;              
    scanf("%d", &N);
    NF = Factorial(N);
    if (NF)  printf("%d! = %d\n", N, NF);
    else printf("Invalid input\n");
    return 0;
}
int Factorial( const int N ){
    int NF = 1;
    while(N>=0&&N<=12){
        for(int i=0;i<=N;i++){
            if(i==0){
                NF = 1;
            }else{
                NF =NF*i;
            }
        }
        return NF;
    }
    return 0;
}

结束语:做这个题目提交了三次,第一次想都没想,要求也没看,直接就动手了,是在自己的VC中实现了,结果正确,直接把一个递归代码丢进去就以为能搞定了,谁知道只是部分正确,才知道是没看题目要求,当然这也是求n的阶乘的一个方法,所以在这里总结下求n阶乘的几种方法:

  • 方法一:
#include <stdio.h>
int Factorial(int N );
int main()
{
    int N;              
    scanf("%d", &N);
    printf("%d! = %d\n",N,Factorial(N));
    return 0;
}
int Factorial(int N ){
    if(N == 0 || N == 1)
        return 1;
    else{
        return N*Factorial(N-1);
    }
}
  • 方法二:
/*--- 1 利用阶乘的定义求解阶乘 ---*/   
#include<stdio.h>
void main(){
    int i,n;
    long f=1;   
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        f=f*i;   
        printf("%d!=%ld",n,f);
    }
 }  
  • 方法三:
    我姑且把这道题的解答称之为第三种方法吧,显而易见,这个PAT练习题虽然不难,但如果粗心的话还是很容易犯错误的,所以,我们在敲代码的时候,一定得仔细,不能遗漏了任何一个可能影响程序结果的条件或者要求。

你可能感兴趣的:(编程,函数,PAT练习,简单阶乘计算)