1. 程式人生 > >基礎練習 階乘計算

基礎練習 階乘計算

問題描述

  輸入一個正整數n,輸出n!的值。   其中n!=1*2*3*…*n

演算法描述

  n!可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用一個數組A來表示一個大整數aA[0]表示a的個位,A[1]表示a的十位,依次類推。   a乘以一個整數k變為將陣列A的每一個元素都乘以k,請注意處理相應的進位。   首先將a設為1,然後乘2,乘3,當乘到n時,即得到了n!的值。

輸入格式

  輸入包含一個正整數nn<=1000。

輸出格式

  輸出n!的準確值。

樣例輸入

10

樣例輸出

3628800

重點是題目中劃黑體字的部分

注意這道題的輸出 ,從後往前,當遇到不為0的數時,開始輸出

#include<bits/stdc++.h>

using namespace std;
#include<cstring>
int main()
{
    int a[4005];
    memset(a,0,sizeof(a));
    int n;
    cin>>n;
    int j,ands=0,s=0;
    a[0]=1;
    for(int i=2;i<=n;i++){
        for(j=0;j<4000;j++){
            s=a[j]*i+ands;
            a[j]=s%10;
            ands=s/10;
             }
    }
    int i;
    for( i=4000-1;i>=0;i--){
       if(a[i])
           break;
   }
    for(int j=i;j>=0;j--)
        printf("%d",a[j]);
    printf("\n");
    return 0;
}