2012年5月28日 星期一

BigInteger 超大整數 class for C++

無限長度的超大整數 class,提供 加、減、乘、除、餘數、負數、大小比較等基本功能,由於是為了個人使用上的須要而開發,原則上是不會再增加其他運算功能,因提供的是原始檔,若有其他須求請自行擴增吧。

下載 BigInteger_1.13(C++ 版).rar
https://www.dropbox.com/s/hvag2ppa1h1fyrl/BigInteger_1.13%28C%2B%2B%20%E7%89%88%29.rar
http://pan.baidu.com/s/1jGsoUuq

以下僅對數值資料的設定和提取做說明:

(1)直接複製:

直接將指定的數據做拷貝

unsigned char data[] = {0×06,0xff,0xff,0xff,0xff,0xF4};
BigInteger BI(data,6); // 在建構時設定好數值資料

unsigned char *V;
unsigned int V_Length; // 會回傳有多少 bytes
BI.PickUp(&V,&V_Length); // 取出 數值資料 的方法, V 會和 data 內容相同
delete [] V; // 須由呼叫端 delete


(2)字串轉換:

和 (1) 作用相同,只不過設定數值和提出數值是用字串,字串採用 STL 的 string

std::string data("f4ffffffff06″);
BigInteger BI(data); // 在建構時設定好數值資料,和(1)一樣的數值,但注意其順序

std::string V = BI.toHexString(); // 將數值資料轉換為 16 進位的字串輸出


(3)指定基數的字串:

可以指定輸入和輸出是要哪種進位制,基數須在 2~36,另外若是負數要在字
串前頭多加個 ‘-’ 字元

std::string data("-12094627905786″); // 和 (1)(2) 相同的數值,只不過這裏是用 10 進位
BigInteger BI(data,10); // 在建構時設定好數值資料,指定其為 10 進位

std::string V = BI.toString(10); // 將數值資料轉換為 10 進位的字串輸出


(4)一般整數值設定:

若初始值不是大數,一般編譯器就能處理的話,用這方法比較方便

BigInteger BI1 = 100;
BigInteger BI2 = 10 + BI1;


以上 (1) (2) 用的數值是電腦記憶體的儲存資料的格式,最高位元組(byte)的
最高位元用來表示正負(0為正 1為負),若是負數則為 2′的補數 格式。
而 (3) 用的數值是一般數值表示法,不管用什麼進位,若字串前頭有 ‘-’ 字元,
即為負數,否則為正數。

輸入和輸出的方式並非一定要相同,即用 (1) 設定也可以用 (2)(3) 取出。

(2) (3) 字串轉數值的動作,將取至字串結尾(即 \0)或非基數的字元為止。

只做過初步測試,不確定是否還有 bug ,若發現問題麻煩留言告訴我,謝謝






沒有留言:

張貼留言