周孝聍优秀作者
原创内容 来源:小居数码网 时间:2024-07-29 14:06:01 阅读() 收藏:31 分享:73 爆
导读:您正在阅读的是关于【数码知识】的问题,本文由科普作家协会,生活小能手,著名生活达人等整理监督编写。本文有606个文字,大小约为3KB,预计阅读时间2分钟。
今天这道题目呢,又是我们的老朋友“阶乘计算”,不过相较于之前那道阶乘计算而言,这道题目的难度略有提升。
就是先需要对输入的整数N进行一个判断,该整数不超过1000,如果N是非负整数,则函数在一行中必须打印N!得到的值,否则打印“Invalid input”。
这道题目的逻辑很简单,不过针对函数篇的题目,我们还是按照固有形式来做。
就是进行倒推,根据题目给定的裁判测试程序样例,然后倒推得到逻辑。
但很显然,这道题目既然给定N的范围,就说明N的范围是要考虑在内的。
正如1000的阶乘等于超级大的数,很显然用double、long等数据变量类型都无法表示。
所以这道题目优先级最高的方法应该是选择数组。
很显然,如图所示,在用数组的方法来解决这道题目时,整道题目的逻辑就一下子变得清晰起来,难度也下降了不少,也为我们解决这道题提供了方向。
//阶乘计算升级版#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语言程序函数)的全部内容,希望可以帮助到你,想了解更多关于数码知识的问题,欢迎关注我们,并收藏,转发,分享。
94%的朋友还想知道的:
(473)个朋友认为回复得到帮助。
部分文章信息来源于以及网友投稿,转载请说明出处。
本文标题:阶乘c++语言程序函数(阶乘c语言程序函数):http://sjzlt.cn/shuma/152567.html