階乘的精確值 大資料存放
阿新 • • 發佈:2019-02-10
對於不超過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; }
一個簡單的例子,淺談資料存放的問題