本题要求实现一个打印非负整数阶乘的函数。

函数接口定义:

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 sum = 1;if (N >= 0 && N <= 12) {for (int i = 0; i <= N; i++) {if (i == 0) {sum = 1;}else {sum = sum*i;}}printf("%d\n", sum);}else if (N > 12 && N <= 1000) {int Num[3000] = { 0 };  //确保保存最终运算结果的数组足够大:1-9相乘最多有9位,10-99相乘最多有2*90=180位,100-999相乘最多有3*900=2700位,1000是4*1=4位,总计2893,最好数组取大一下int i, j, k, n;k = 1;  //位数n = 0;  //进位Num[0] = 1;   //将结果先初始化为1int 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;  //新加一位,添加信息。位数增1k++;n = n / 10;   //看还能不能进位}}for (i = k - 1; i >= 0; i--){printf("%d", Num[i]);  }printf("\n");}else {printf("Invalid input\n");}
}

我自己觉得比较难理解的:1、因为long数据类型表示的数字范围到2147483647,而12!正好是9位数,所以从12为分界点,后面数字阶乘结果比较大,适合用数组存储。

2、采用数组方法存储,设置进位、位数、临时值。

3、临时值一定要每一位都与第i个元素相乘。

6-10 阶乘计算升级版 (20 分)相关推荐

  1. 阶乘计算升级版 (20分)_求1!+2!+3!+...+20!的和

    题目:求1!+2!+3!+...+20!的和 阶乘定义: n! = 1 * 2 * 3 * - * n 难度 简单 参考答案 核心是阶乘的计算. 20!的阶乘的位数的估算非常重要,导致在定义阶乘函数的 ...

  2. #035 大数阶乘 PTA题目6-10 阶乘计算升级版 (20 分)

    实际题目 本题要求实现一个打印非负整数阶乘的函数. 函数接口定义: void Print_Factorial ( const int N ); 其中N是用户传入的参数,其值不超过1000.如果N是非负 ...

  3. 基础编程题目集 6-10 阶乘计算升级版 (20 分)

    问题描述: 解题思路: 由于N最大为1000,int的范围最大为10的9次方,long long int的范围最大为10的18次方,使用斯特林公式计算可知,n为12时,结果的位数已经为9,故N取100 ...

  4. 6-10 阶乘计算升级版(20 分)

    6-10 6-10 阶乘计算升级版(20 分) 本题要求实现一个打印非负整数阶乘的函数. 函数接口定义: void Print_Factorial ( const int N ); 其中N是用户传入的 ...

  5. C++学习之路 | PTA乙级—— 1063 计算谱半径 (20 分)(精简)

    1063 计算谱半径 (20 分) 在数学中,矩阵的"谱半径"是指其特征值的模集合的上确界.换言之,对于给定的 n 个复数空间的特征值 { a ​1 ​​ +b ​1 ​​ i,⋯ ...

  6. 用python做一个输入半径值计算圆的面积保留两位小数_1063 计算谱半径 (20分)

    1063 计算谱半径 (20分) 在数学中,矩阵的"谱半径"是指其特征值的模集合的上确界.换言之,对于给定的 n 个复数空间的特征值 { a1+b1i,⋯,an+bni },它们的 ...

  7. 时间格式的转换 例如:(2021-05-10 14:20:43) 转为( 2021年5月10日 14时20分43秒)

    console.log(name('2021-02-10 14:20:43'));function name(date) {const arr = date.split(/[-: ]/)return ...

  8. 7-5 计算个人所得税 (20分)

    假设个人所得税为:税率×(工资−1600).请编写程序计算应缴的所得税,其中税率定义为: 当工资不超过1600时,税率为0: 当工资在区间(1600, 2500]时,税率为5%: 当工资在区间(250 ...

  9. 【简便代码】1063 计算谱半径 (20分)_10行代码AC

    立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 在数学中,矩阵的"谱半径"是指其特征值的模集合的上确界.换言之,对于给定的 n 个复数空间的 ...

最新文章

  1. hadoop过程中遇到的错误与解决方法
  2. 在myeclipse当中使用正则表达式去除单行注释
  3. java的内部类和匿名类剖析
  4. 宜昌远安谋定功能性-农业大健康·万祥军:绿色和谐新路
  5. 拼接字符SQL语句拼接 最后一个字符多出 处理方式
  6. mysql的复杂查询_mysql复杂查询
  7. Linux网络编程——tcp并发服务器(I/O复用之select
  8. 工作流实战_15_flowable 我发起的流程实例查询
  9. LuaForUnity4:Lua的函数
  10. pythonreduce()函数、sorted()函数、reversed_cmp函数、类和对象
  11. ConstraintLayout约束控件详解
  12. Matlab逻辑运算符/与/或/非/异或/all/any
  13. 揭秘小红书的种草套路
  14. Linux下挂载NTFS分区
  15. UML图六种箭头含义
  16. NVIDIA Jetson之远程控制软件NoMachine安装使用
  17. 【SQL】利用sql语句在mysql的表中插入date类型的数据,
  18. 【SDN】软件定义硬件
  19. foter 图像处理APP_摄影师必备的图像编辑APP
  20. onegreen的绿软word2003绿色版删除不掉的解决方案

热门文章

  1. snort 检测nmap_Snort入侵检测系统安装与配置
  2. 英语入门怎么学,负基础
  3. 缓存穿透,击穿,雪崩
  4. 百胜erp软件下载 php,百胜erp软件迎来电商软件3.0时代
  5. 计算机二级vb弹出式菜单,等考二级VB:用VB、VFP设计右键弹出式菜单
  6. plantuml 依赖_PlantUML参考手册
  7. 微信小程序视频上传案例
  8. php 中国时间转换美国时间差,美国时差_美国时差查询_中国美国时差_北京时间和美国时差...
  9. 车辆超速监控系统c语言编程,c语言车辆违章管理系统
  10. Alpha and Beta