本題要求實現一個打印非負整數階乘的函數。
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]); }}
新聞熱點
疑難解答