PTA 4-10 阶乘计算升级版 (20分)
2016-09-07 11:48
615 查看
本题要求实现一个打印非负整数阶乘的函数。
函数接口定义:
其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。
裁判测试程序样例:
输入样例:
输出样例:
程序代码:
函数接口定义:
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"); } }
相关文章推荐
- 4-10 阶乘计算升级版 (20分)
- 4-10 阶乘计算升级版 (20分)
- pta 6-10 阶乘计算升级版
- [PTA] 4-10 阶乘计算升级版
- 4-10 阶乘计算升级版 (20分)
- 4-10 阶乘计算升级版 (20分)(大数乘法)
- 4-10 阶乘计算升级版
- PAT基础编程题 4-10 阶乘计算升级版
- (函数题)4-10 阶乘计算升级版
- 计算阶乘升级版---pta测试基础题
- 4-10 阶乘计算升级版
- 4-10 阶乘计算升级版
- 4-10 阶乘计算升级版
- 4-10 阶乘计算升级版*
- PAT基础题 4-10 阶乘计算升级版
- 6-10 阶乘计算升级版
- 【java计算问题】 1到10的阶乘,1+3+5+……+97+99的和
- 阶乘计算升级版
- 阶乘计算升级版
- 阶乘计算升级版(大整数)