1. 程式人生 > >藍橋杯:階乘計算

藍橋杯:階乘計算

題目:

輸入一個正整數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<iostream>
#include<cstring>

using namespace std;

int main(){
    int n;
    cin>>n;
    int a[10001];
    if(n==1) cout<<"1"<<endl;
    else{
        int h=0,e=0;
        memset(a,0,sizeof(a));
        a[e]=1;
        int c;
        for(int i=2;i<=n;i++){
            c=0;
            for(int j=h;j<=e;j++){
                int p=a[j]*i+c;
                c=p/10;
                a[j]=p%10;
            }
            while(c){
                e++;
                a[e]=c%10;
                c/=10;
            }
        }
        for(int k=e;k>=h;k--){
            cout<<a[k];
        }
    }

    return 0;
}