求10000以內n的階乘

2021-06-22 19:53:32 字數 879 閱讀 8425

經過我n天的努力,終於把大整數的階乘的乙個演算法看懂了!什麼智商嘛,打擊死我自己了。什麼是大整數的階乘呢,就是結果無論用c++語言中的哪一種資料型別都不能儲存的。既然不能用一種資料型別儲存,那麼只能想其他的辦法儲存了。呵呵,就像~~~於是,我們自然而然的想到了用陣列來儲存數字。建立乙個int的陣列。因為int的最大數為2147483647,理論上就算是算到214748364的階乘也是沒有問題的。因為214748364乘9肯定小於2147483647嘛!呵呵,不過我在筆記本上試了,算1000的階乘的時候一下就出來了,算10000的階乘的時候就很慢了,要等待幾秒鐘才可以,呵呵,我的筆記本的主頻是2.0 ghz,記憶體是1g,如果真要算2147483647的階乘,還真不知道要等多久,而且網上算了,因為n!小於(n+1)/2 的n的次方。用乙個陣列元素儲存乙個數字,那麼開闢的陣列要能儲存n*log10((n+1)/2)個數。我的天啊,這要多大的記憶體啊!不過不要緊,如果真要算很大的數字,我們當然只會開闢乙個動態陣列啦。呵呵,下面是我在網上找的一種演算法,雖然演算法效率不是很高,但至少比網上有只寫四行**就可以算到200000的階乘要好理解。先看我找的**吧,這個估計是最容易懂的演算法了,呵呵!

#include using namespace std;

void main()

;/*此處是關鍵,當將a陣列定義在main內時,則超時。在外面可避免超時*/

int main()

{int n,i,len=1,j,temp=0;/*temp為溢位位的溢位量,len為數初始長度*/

cin>>n;

a[0]=1;/*數的初始值*/

for(i=2;i<=n;i++)

{for(j=0;j=0;i--)

{if((i+1)%50==0&&i+1!=len)/*遇50位換行*/

cout<

1172 求10000以內n的階乘

1172 求10000以內n的階乘 時間限制 1000 ms 記憶體限制 65536 kb 提交數 6575 通過數 1675 題目描述 求10000以內n的階乘。輸入 只有一行輸入,整數n 0 n 10000 輸出 一行,即n 的值。輸入樣例 4 輸出樣例 24沒有優化,直接爆掉了。資訊學奧賽一本...

求n的階乘(10000)

題意 如題目 思路 用乙個陣列,陣列的每一位存乙個8位數,兩個for迴圈,不斷從1開始累乘。include include include include using namespace std const int maxn 100000000 注意不能超過long long 的表示範圍 long ...

一本通 1172 求10000以內n的階乘

求10000以內n的階乘。只有一行輸入,整數n 0 n 10000 一行,即n 的值。42410000 10000 用int 可以儲存的下,思路和大整數加法類似,邊計算邊進製,否則最後兩個樣例會超時 include using namespace std define coutint a,b cou...