题目:
本题要求实现一个打印非负整数阶乘的函数。
函数接口定义:
void Print_Factorial ( const int N );
其中N
是用户传入的参数,其值不超过1000。如果N
是非负整数,则该函数必须在一行中打印出N
!的值,否则打印“Invalid input”。
题目分析:
本题要求到1000的阶乘,会超出int的范围,所以可以用数组保存每一位的信息,打印时要注意避开前导0;
题目解答:
void Print_Factorial ( int N )
{
int n=N;
if(n<0){
printf("Invalid input");
return;
}
if(n==0){
printf("1");
return;
}
//定义数组,并赋初始值
int nums[10000]={0};
nums[0]=1;
//计算阶乘,并将每一次的结果倒序存入数组
while(n>0){
int carry=0;
for(int i=0;i<10000;i++){
int sum=carry+nums[i]*n;
nums[i]=temp%10;
carry=sum/10;
}
n--;
}
//遍历,避开前导0
int k=10000;
while(--k){
if(nums[k]!=0)
break;
}
//打印
for(;k>=0;k--)
printf("%d",nums[k]);
}