1. 程式人生 > >階乘的精確值 大資料存放

階乘的精確值 大資料存放

對於不超過1000的數,用於計算其的階乘。問題主要解決的問題就是階乘產生的結果的存放問題,緣由1000!的結果大約是4*10的2567次方,一般的資料型別根本解決不了,因此可以採取一個大小為3000的陣列用於存放位數,a[0]存放個位,a[1]存放百位,...,最後逆序輸出。

程式碼如下:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define MAX 3000
int a[MAX];
int main()
{
    int i,j,n;
    scanf("%d",&n);
    memset(a,0,sizeof(a));
    a[0] = 1;
    for(i=2;i<=n;i++){
        int c = 0;
            for(j=0;j<MAX;j++){     //用於分離每一位存放於陣列中
                int s =a[j]*i+c;
                a[j] = s%10;
                c = s/10;

            }
    }
    for(j=MAX-1;j>=0;j--) if(a[j]) break;   //用於忽略前面的0
    for(i=j;i>0;i--) printf("%d",a[i]);
        return 0;
}

一個簡單的例子,淺談資料存放的問題