6-10 阶乘计算升级版(20 分)
本题要求实现一个打印非负整数阶乘的函数。
函数接口定义:
1
| void Print_Factorial ( const int N );
|
其中N
是用户传入的参数,其值不超过1000。如果N
是非负整数,则该函数必须在一行中打印出N
!的值,否则打印“Invalid input”。
裁判测试程序样例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <stdio.h>
void Print_Factorial ( const int N );
int main() { int N; scanf("%d", &N); Print_Factorial(N); return 0; }
|
输入样例:
输出样例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| #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 ){ long i,s=1; if(N>=0&&N<=12){ for(i=2 ;i<=N ;i++){ s *= i; } printf("%ld\n",s); } else if(N>12&&N<=1000){ int num[3000] = {0}; num[0] = 1; int k=1; int n=0; int temp; for(int i=2 ;i<=N ;i++){ for(int j=0;j<k;j++){ temp = num[j]*i+n; num[j] = temp%10; n = temp/10; } while(n!=0){ num[k] = n%10; n /=10; k++; } } for(int x=k-1;x>=0;x--){ printf("%d",num[x]); } } else{ printf("%s\n","Invalid input"); } }
|