1. 程式人生 > 其它 >PAT 6-10

PAT 6-10

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;
}

/* 你的程式碼將被嵌在這裡 */
void Print_Factorial ( const int N )
{
    int n=N;
    if(n<0)
    {
        printf("Invalid input");
        return;
    }
    int nums[10000]={0};    //建立一個數組用於存放結果
    int k=1;    //結果的位數,最少為1
    int up=0;   //進位
    nums[0]=1;  //初始化個位結果為1
    int temp;
    for(int i=2;i<=n;i++)
    {
        
for(int j=0;j<k;j++) { temp=nums[j]*i+up; //臨時結果=前階乘結果的某位*i+up nums[j]=temp%10; //臨時結果給位的數 up=temp/10; //看是否需要進位 } while(up!=0) //看最後得到的up是否需要進位 { nums[k]=up%10; //現最高位上的數 up/=10; //up>0則需進位,k++
k++; } } for(int i=k-1;i>=0;i--) { printf("%d",nums[i]); //輸出最終結果 } }