**
其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。
**
/*其中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;
}
/* 你的代码将被嵌在这里 */
void Print_Factorial ( const int N ){
int copy_N=N,digit=0;//copy_N待处理的乘数,digit记录有多少位
int i,n_digit,w;//循环变量;数字的第几位 ;进位
int a[3000];//存储数组
while(copy_N){
a[digit++] = copy_N%10;
copy_N /= 10;
}//将第一个乘数N存入数组,同时获得数组已存储位数
for( i=N-1; i>1; i--){
w = 0;
for(n_digit=0; n_digit<digit; n_digit++){
a[n_digit] *= i;
a[n_digit] += w;//该位数字乘新的乘数,再加上进位w
w = a[n_digit]/10;//进位
a[n_digit] %= 10;//进位之后的更新值
} //新的乘数对之前的乘积从0开始每一位相乘,一次循环更新一位数
while(w){
a[digit++] = w%10;
w /= 10;
}//将此次乘数与每位数字相乘的总进位填充到数组空位,同时digit加1
} //从N-1到2依次做乘法 ,一次循环乘一个数
for( i=digit-1; i>=0; i--){
printf("%d",a[i]);
} //按照高位依次输出存储数组
putchar('\n');
}
———————————————————————————————————
本题要求实现一个打印非负整数阶乘的函数。
函数接口定义 |
---|
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
———————————————————————————————————