大數問題 超大數(10000以內)的階乘

2021-08-15 09:58:56 字數 1253 閱讀 4926

問題分析:很容易發現,由於n的範圍很大,一般簡單的階乘演算法肯定會溢位,因為當20!已經接近long long的上限了。

下面基於上面的思想,給出此題的兩種**實現:

①事先製表:

#includeusing namespace std;

#define n 10005

vecto***ctorial[n];

void calc(int n) //計算

int jinwei = 0; //變數jinwei用於儲存下位進上去的數字,初始為0

for(int i = len-1;i >= 0;--i)

while(jinwei)

}void make_table() //製表 }

int main()

return 0;

}

②直接計算,沒有製表

#includeusing namespace std;

vectorv;

int n;

int main()

int jinwei = 0; //變數jinwei用於儲存該位要向上進製的數字

for(int j = len-1;j >= 0;--j)

while(jinwei)

}int len = v.size(); //列印結果

for(int i = 0;i < len;++i)

cout << endl;

} v.clear();

} return 0;

}

ps:一開始,為了節省時間,我採用了第一種**,制了表,可是提交上去發現,超出記憶體限制,仔細一想也對,畢竟當n為3000時,結果就已經在螢幕上顯示過百行了,放在記憶體裡,肯定會花費很多記憶體的。

然後就才採用了第二種**,結果過了,其實因為題目測試樣例的n不會測很多的,所以完全沒必要採用製表方法來節省時間,若是要測很多n,那麼製表肯定會比第二種**節省很多時間的。

超大數問題 N

提交此題 資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 輸入乙個正整數n,輸出n 的值。其中n 1 2 3 n。演算法描述 n 可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用乙個陣列a來表示乙個大整數a,a 0 表示a的個位,a 1 表示a的十位,依次類...

實現大數階乘加法 大數階乘以及超大數輸出的實現

近期碰到個求大數階乘的題目,大意如下 原題來自pat基礎函式題 起初未考慮輸出超大數問題,直接printf輸出結果,但當數增大到一定程度後就無法正常輸出這才認識到到 d輸出範圍有限 中間還從 d到 ld,再到 lld做了努力。查詢下資料發現超大數問題可以通過字元形式輸出結果,下面分享下我的示例 in...

求10000以內n的階乘

經過我n天的努力,終於把大整數的階乘的乙個演算法看懂了!什麼智商嘛,打擊死我自己了。什麼是大整數的階乘呢,就是結果無論用c 語言中的哪一種資料型別都不能儲存的。既然不能用一種資料型別儲存,那麼只能想其他的辦法儲存了。呵呵,就像 於是,我們自然而然的想到了用陣列來儲存數字。建立乙個int的陣列。因為i...