PTA 4-10 阶乘计算升级版 (20分)
来源:互联网 发布:算法导论 pdf下载 编辑:程序博客网 时间:2024/05/29 07:57
本题要求实现一个打印非负整数阶乘的函数。
函数接口定义:
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;}/* 你的代码将被嵌在这里 */
输入样例:
15
输出样例:
1307674368000
程序代码:
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 }; //确保保存最终运算结果的数组足够大:1-9是1*9=9位,10-99是2*90=180位,100-999是3*900=2700位,1000是4*1=4位,总计2893约3000位 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"); }}
1 0
- PTA 4-10 阶乘计算升级版 (20分)
- [PTA] 4-10 阶乘计算升级版
- PTA 6-10 阶乘计算升级版
- 4-10 阶乘计算升级版 (20分)
- 4-10 阶乘计算升级版 (20分)
- 4-10 阶乘计算升级版 (20分)
- 4-10 阶乘计算升级版 (20分)
- PTA 阶乘升级版
- 4-10 阶乘计算升级版 (20分)(大数乘法)
- 计算阶乘升级版---pta测试基础题
- 4-10 阶乘计算升级版
- 4-10 阶乘计算升级版*
- 4-10 阶乘计算升级版
- 4-10 阶乘计算升级版
- 阶乘计算升级版
- 阶乘计算升级版
- 阶乘计算升级版
- 阶乘计算升级版
- maven+tomcat打包,test单元测试报错问题
- [CSU 1812 三角形和矩形] 计算几何
- LeetCode #321: Create Maximum Number
- Junit4的关键技术相关资料网址
- ElasticSearch中Date
- PTA 4-10 阶乘计算升级版 (20分)
- Apache的AB测试
- 使用七牛上传文件抛出异常问题
- Java 产生 UUID / GUID
- mysql的主从配置
- yarn分布式(HA)
- Oracle 10046事件详解
- 双路录像利用静态变量做多对象之间简单写互斥
- Java小程序——petshop