本文主要是介绍每日一题——阶乘计算升级版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:
6-10 阶乘计算升级版 - 基础编程题目集 (pintia.cn)
题目:
6-10 阶乘计算升级版
分数 20
本题要求实现一个打印非负整数阶乘的函数。
函数接口定义:
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
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
代码:
void Print_Factorial(const int N)
{if (N < 0){printf("Invalid input");}else{int num[2600] = { 0 };//阶乘的结果可能大于int类型,所以需要创建一个数组来储存结果的每位上的数int i = 1;int j = 0;int count = 0;num[0] = 1;int digit = 1;//用来储存结果有几位数for (i = 2; i <= N; i++){//每位数字的储存和更新:for (j = 0; j < digit; j++){int t = i * num[j] + count;num[j] = t % 10;count = t / 10;}//若原来的位数不够储存结果:while (count){num[j++] = count % 10;count /= 10;digit++;}}//将每位数字都打印出来:for (int j = digit - 1; j >= 0; j--){printf("%d", num[j]);}}
}
代码讲解:
阶乘的结果可能大于INT_MAX的值,会导致数据泄漏,所以我们需要想办法解决这个问题。
在这里我采用了数组的形式来储存结果的每一位数,以N=5举例:
这篇关于每日一题——阶乘计算升级版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!