阶乘计算升级版
本题要求实现一个打印非负整数阶乘的函数。
函数接口定义:
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
思路分析:
题6-8 简单阶乘计算,我们定义的就是int型,但在这里数字大小已经超出int型的最大值。int型只支持12及以下的阶乘。这里需要用到数组,来存储结果。
这道题的思路就是模拟小学学的乘法的手算,满10进1。
我们用flag来表示进位的值,bit表示这个结果有多少位,请注意,初始时,要将bit赋值为1,不然得到的所有结果都是0.
代码:
void Print_Factorial ( const int N ){
if(N<0){
printf("Invalid input\n");
return 0;
}
if(N==0){
printf("1\n");
return 0;
}
int num[10000]={0};
num[0]=1;//第一个位置赋值为1,不然的得出的结果都是0
int n=N;
int flag=0,bit=1;//进位的数字大小,统计有多少位数
for(int i=2;i<=n;i++){
flag=0;//每次循环都要置0
for(int j=0;j<bit;j++){
int temp=0;
temp=num[j]*i+flag;
num[j]=temp%10;
flag=temp/10;//进位
}
while(flag !=0){
num[bit]=flag%10;//flag到后面可能会>10
flag/=10;
bit++;
}
}
for(int i=bit-1;i>=0;i--){
printf("%d",num[i]);
}
}
标签:10,const,int,PTA,Factorial,Print,阶乘,bit
From: https://blog.csdn.net/weixin_54641008/article/details/137042369