BASIC-30 VIP試題 階乘計算

/*

問題描述
  輸入一個正整數n,輸出n!的值。
  其中n!=1*2*3*…*n。
算法描述
  n!可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用一個數組A來表示一個大整數a,A[0]表示a的個位,A[1]表示a的十位,依次類推。
  將a乘以一個整數k變爲將數組A的每一個元素都乘以k,請注意處理相應的進位。
  首先將a設爲1,然後乘2,乘3,當乘到n時,即得到了n!的值。
輸入格式
  輸入包含一個正整數n,n<=1000。
輸出格式
  輸出n!的準確值。
樣例輸入
10
樣例輸出
3628800

*/
#include<stdio.h>

int main(void)
{
    int i ,j , n,s ,c = 0 ;
    int a[3000]={ 0 };
    scanf("%d",&n);
    a[0]  = 1;
    for( i = 1 ; i <= n ; i ++)
    {
        for( j = 0 ; j < 3000 ; j ++)
        {
            s = a[j] * i + c ;
            c = s / 10 ;
            a[j] = s % 10 ;
        }
    }
    
    for( j = 3000 -1 ; j >= 0 ; j --)
    {
        if( a[j] != 0)
        {
            break ;
        }
    }
    
    for( i = j ; i >= 0 ; i --)
    {
        printf("%d",a[i]) ;
    }
    
    return 0;
}
發佈了64 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章