本题要求实现一个打印非负整数阶乘的函数。
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输出样例:
1307674368000void Print_Factorial ( const int N ){ if (N<0) printf("Invalid input"); else if(N==0) printf("1"); else { /*这个程序的算法是仿照摆竖式计算两书乘法的方法,乘数的每一位乘以被乘数,大于10则进位*/ int a[20000]={1}; /*由于这题比较变态,N最大为1000,所以只能采用数组来存储答案,且设定的数组长度非常长*/ int digit=1,carry=0; /*digit为位数,carry为进位*/ int temp,i,j; for (i=1;i<=N;i++) { for (j=0;j<digit;j++) { temp=a[j]*i+carry; /*temp为未进位前的数字*/ a[j]=temp%10; carry=temp/10; } while(carry!=0) { a[++digit-1]=carry%10; /*必须限制carry在[0,9]*/ carry=carry/10; } } for(i=digit-1;i>=0;i--) /*按数组的逆序输出,即为答案*/ printf("%d",a[i]); }}
新闻热点
疑难解答