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
程序实现
void Print_Factorial ( const int N )
{
// 排除非法输入
if(N < 0 || N > 1000)
{
printf("Invalid input");
return;
}
// 置零答案数组 置1首元素 定义计数器i
int ans[10000] = {0};
ans[0]=1;
int i = 2;
for(;i<=N;i++)
{//数组中的每个int量仅存储六位 采用低位到高位存储
int j = 1;
ans[0] *= i;
for(;j<1000;j++)
{
ans[j] = ans[j] * i + ans[j-1] / 1000000;
ans[j-1] = ans[j-1] % 1000000;
}
}
//定义计数器j 和输出标记flag
int j = 9999;
int flag = 0;
for(;j>=0;j--)
{//输出标记用于记录首次输出 便于区分中间部分与数字与数字开头的0
if(!flag && !ans[j])
continue;
if(flag)
printf("%06d", ans[j]);
else
{
flag = 1;
printf("%d", ans[j]);
}
}
}