阶乘c语言程序函数(阶乘c++语言程序函数)

今天这道题目呢,又是我们的老朋友“阶乘计算”,不过相较于之前那道阶乘计算而言,这道题目的难度略有提升。

就是先需要对输入的整数N进行一个判断,该整数不超过1000,如果N是非负整数,则函数在一行中必须打印N!得到的值,否则打印“Invalid input”。

阶乘c语言程序函数(阶乘c++语言程序函数)

梳理逻辑

这道题目的逻辑很简单,不过针对函数篇的题目,我们还是按照固有形式来做。

就是进行倒推,根据题目给定的裁判测试程序样例,然后倒推得到逻辑。

但很显然,这道题目既然给定N的范围,就说明N的范围是要考虑在内的。

正如1000的阶乘等于超级大的数,很显然用double、long等数据变量类型都无法表示。

所以这道题目优先级最高的方法应该是选择数组。

阶乘c语言程序函数(阶乘c++语言程序函数)

很显然,如图所示,在用数组的方法来解决这道题目时,整道题目的逻辑就一下子变得清晰起来,难度也下降了不少,也为我们解决这道题提供了方向。

代码实现

//阶乘计算升级版
#include <stdio.h>

void Print_Factorial ( const int N );

int main()
{
    int N;

    scanf("%d", &N);
    Print_Factorial(N);
    return 0;
}

void Print_Factorial ( const int N ){
    int Store[10000];//用数组的方法
    Store[0] = 1;//数组下标第一个元素应该是从1开始的
    int every = 0;//每一位的结果
    int M = 0;//进位
    int digit = 1;//各个位数
    if(N<=1000&&N>=0){//N的值要不超过1000,且为非负
        for(int i = 1; i <= N; i++){//从1开始,到N为止
            for(int j = 0; j < digit; j++){//当digit=1时,当digit=2时;
            //当digit=3时,当digit=4时,当digit=5时
                every = Store[j]*i+M;//every = 1+0=1;every=1*2+0;every=2*3+0;
                //every=6*4+0=24
                Store[j] = every%10;//1,2,6,4
                M = every/10;//0,0,0,2
            }
            while(M!=0){//M=2
                Store[digit]=M%10;//0
                M = M/10;//0
                digit++;//+1
            }
        }
        for(int i = digit-1; i >= 0;i--){
            printf("%d",Store[i]);
        }
    }
    else{
        printf("Invalid input");
    }
}

结果测试

阶乘c语言程序函数(阶乘c++语言程序函数)

阶乘c语言程序函数(阶乘c++语言程序函数)

阶乘c语言程序函数(阶乘c++语言程序函数)

总结

在很多时候,数组真的非常好用,就拿今天这道题目来说,能够解决阶乘的一个超过数据变量范围的问题,数组就很值得称赞了!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论