大整數(shù)階乘的算法思路
這里的大整數(shù)指大于500以上的整數(shù),當(dāng)然更大也可以。由于整數(shù)階乘遞增的很快,遠(yuǎn)大于指數(shù)式遞增,對于小整數(shù),比如20,30左右,可以直接使用比如遞歸的方式進(jìn)行,這很基本。
但是當(dāng)整數(shù)較大時,階乘的結(jié)果很大,遠(yuǎn)非一個int或者long就能存的下的,比如1000的階乘結(jié)果有上千位。
所以大整數(shù)階乘設(shè)計的關(guān)鍵點(diǎn)就是存儲大整數(shù),當(dāng)選擇了存儲大整數(shù),那么整數(shù)的乘法運(yùn)算也不能再依靠*了,所以還要重新設(shè)計大整數(shù)的懲罰運(yùn)算。
上面是我的設(shè)計思路。網(wǎng)上找過相關(guān)的文章,有高手以4行代碼完成了該算法,確實(shí)佩服!當(dāng)然這涉及了算法的優(yōu)化,不管那么多了,這里要的就是以盡量清晰地思路快速設(shè)計該算法,這是使用了STL標(biāo)準(zhǔn)庫的容器。
下面是我的算法代碼,直接貼這里了,注意看相關(guān)的注釋:
#include
#include
using namespace std;
// 傳入整數(shù):int,和整數(shù)-1的階乘結(jié)果,進(jìn)行相乘的結(jié)果
// 結(jié)構(gòu)依然存儲到容器中
void Calc(int num,vector &calcresult)
{
vector tempnum;
vector rest;
// 將傳入的int拆分之后保存到容器中
do
{
tempnum.push_back(num % 10);
num = num / 10;
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |