PAT练习基础编程题目之阶乘计算升级版
2015-12-03 22:04
555 查看
阶乘计算升级版
导语:循序渐进,登峰造极,方能否极泰来。。。- 阶乘计算升级版
- 函数接口定义:
void Print_Factorial ( const int N );
其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。
#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 ){ long NF = 1; if(N>=0&&N<=12){ for(int i=0;i<=N;i++){ if(i==0){ NF=1; }else{ NF=NF*i; } } printf("%d\n",NF); }else if(N>12&&N<=1000){ int Num[3001]={0}; //确保保存最终运算结果的数组足够大 int i,j,k,n; k=1; //位数 n=0; //进位 Num[0]=1; //将结果先初始化为1 int temp; //阶乘的任一元素与临时结果的某位的乘积结果 for(i=2;i<=N;i++) //开始阶乘,阶乘元素从2开始依次"登场" { //按最基本的乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘 for(j=0;j<k;j++) { temp=Num[j]*i+n; //相应阶乘中的一项与当前所得临时结果的某位相乘(加上进位) Num[j]=temp%10; //更新临时结果的位上信息 n=temp/10; //看是否有进位 } while(n!=0) { //如果有进位 Num[k]=n%10; //新加一位,添加信息。位数增1 k++; n=n/10; //看还能不能进位 } } for(i=k-1;i>=0;i--) { printf("%d",Num[i]); //显示结果 } printf("\n"); }else{ printf("Invalid input\n"); } }
结束语:仰天大笑出门去,我辈岂是蓬蒿人!
再编辑原因:今天和个朋友讨论了这段程序,朋友说看了我的代码表示依旧不理解,于是详细跟他讲解了下,再想想这里可能也有一些朋友无法看懂代码,于是回头补上了一些易懂的注释,希望对不太理解的朋友有一定的帮助。。。
相关文章推荐
- LeetCode 299 : Bulls and Cows (Java)
- VS2012 打开C++项目时出现MSB8020的错误代码
- 趣学Python-教孩子学编程--第十二章
- 生产环境JAVA进程高CPU占用故障排查
- Eclipse 代码提示功能设置
- Java多线程初学笔记
- 利用python中的pandas,sklearn进行数据挖掘 basic_of_datamining
- codeforces604B More Cowbell
- 并发编程网
- JAVA图形界面三星题之Hangman
- Python扩展库psutil用法精要
- [转]JAVA设计模式之单例模式
- eclipse的maven、Scala环境搭建
- codeforces604C Alternative Thinking (脑洞大开 )
- 浅谈面向对象(java)
- Java Web中的中文编码问题(上)
- 十万个对不起实现,Java版
- 使用Java编写并运行Spark应用程序
- java编程思想(读书笔记):5.隐藏实现细目
- 大数相乘——分治法(lua版)