C 大數處理

2021-07-05 03:08:27 字數 1175 閱讀 6329

c++程式設計中,常會處理一些大數的操作,例如冪指數計算,組合數計算,大數之間的加減法等。

大數通常的處理就是當作字串或者陣列,然後對每一位進行操作。舉簡單的加法來說,就是從低位逐位相加,大於等於10的進製。這裡在儲存大數時,遵循低位在前,高位在後的方式,這樣方便取資料。

字元反轉程式:

char* strreverse(const char* str)

return tmp;

}

大數相加程式:

string bigdataadd(string num1, string num2)

return strreverse(result.c_str());

}

大組合數處理:對於有n 個元素的集合,隨機取k 個的組合數為二項式公理係數c(n, k),詳見

其公式如下:

這裡就概率組合問題舉一例,某人射擊運動中射中的概率為p,求在n 次射擊中射中k 次的概率。

當n 很小時,普通double型別還能儲存n!,但是n > 100或者更大時,所有已知型別都沒有足夠大儲存n!。

對於n=100,k=50來說其組合數是相當的大。採用對數形式將其變小:

容易看出不僅我們的目的達到了,其運算速度也提公升了,只算加法。

/**********************************

calculate binomial expression p(c(n, k))=c(n, k) * p^k * p^(n-k),

its' deformation is exp(ln(c(n, k)) + k * ln(p) + (n - k) * ln(n - k))

where c(n, k) = c(n, n - k), it can reduce computation, too.

**********************************/

double prob(int n, int k, double p)

大數的處理

一般情況下,如果涉及到大數問題一般都會採用字元陣列來解決,在使用字元陣列時,需要注意的問題 1.首先宣告整數陣列,陣列中的每個元素都當做單獨的數字進行運算.2.陣列的初始化,根據計算型別的不同初始化操作也不同 3.每個陣列元素進行運算完畢後,必須進行進製處理,進製時原有數字與進製 a i 1 a i...

大數的處理

參考 ac 如下 include include using namespace std 大數相乘 string bigintegerplus string res,string plusn int len1 res.length len2 plusn.length for int i len2 1...

處理大數字

處理大數字 高精度浮點數bigdecimal 它可以表示任意精度的小數,並對它們進行計算 由於bigdecimal物件是不可變的,這些方法中的每乙個都會產生新的bigdecimal物件 因此,因為建立物件的開銷,bigdecimal不適合於大量的數學計算,但設計它的目的是用來 精確地表示小數 pub...