#include <stdio.h>#include <stdlib.h>#define NUM_LEN 100int add_str(char * pch1,char * pch2 , char * chResult){ chResult[NUM_LEN-1]='\0'; int idx=NUM_LEN-2; char *pEnd1=pch1,*pEnd2=pch2; for(;*pEnd1!='\0';pEnd1++); for(;*pEnd2!='\0';pEnd2++); pEnd1--; pEnd2--; short flag=0; //是否有進位 for(;(pEnd1!=pch1-1) || (pEnd2!=pch2-1);){ short b1=0; if(pEnd1!=pch1-1){ b1= (short)(*pEnd1)-(short)'0'; // '0' -> 0 pEnd1--; } short b2=0; if(pEnd2!=pch2-1){ b2= (short)(*pEnd2)-(short)'0'; // '0' -> 0 pEnd2--; } short sResult = b1+b2+flag; flag=0; if(sResult>9){flag=sResult/10;sResult %=10;} chResult[idx--] =(char)( sResult+(short)'0'); } if(flag)chResult[idx--]=flag+(short)'0'; return idx+1;}int main(){ char ch1[NUM_LEN],ch2[NUM_LEN],chResult[NUM_LEN]; printf("Num1:"); scanf("%s",ch1); printf("\nNum2:"); scanf("%s",ch2); printf("\nNum1=%s",ch1); printf("\nNum2=%s",ch2); int idx=add_str(ch1,ch2,chResult); printf("\n結果:%s",(char*)chResult+idx); return 0;}
GMP:GMP大數庫是GNU項目的一部分,誕生於1991年。作為一個任意精度的大整數運算庫,它包括了任意精度的帶正負號的整數、有理數、浮點數的各種基本運算操作。它是一個c語言的庫,但是官方提供了c++的封裝類,主要的應用方向是密碼學、網路安全、代數系統、計算科學等。GMP庫的運行速度非常快的,它的官方網站上稱自己為地球上最快的大數庫,但是GMP庫所提供的只是數學運算功能,並沒有密碼學相關的進階功能。
Miracl:Miracl庫是Shamus Software Ltd開發的一個大數庫,它的使用許可針對教育科學研究或者非商業目的地應用是免費的。在應用上它是一個c語言的庫,同時提供了幾個較為簡單的c++封裝類。在功能上它不但提供了高精度的大整數和分數的各種數學運算操作而且提供了很多密碼學演算法中的功能模組,如SHA、AES、DSA等中的一些底層操作。最為特別的是它還提供了很多橢圓曲線密碼體制中的底層功能模組。由於Miracl庫的內部實現採用了很多的彙編層的代碼,故運行速度也非常快。
Crypto++:Crypto++庫是一個開源項目,也是免費使用的。由於它是一個純c++實現的庫,所以應用非常的方便,庫的結構清晰,使用方便,文檔也很健全。Crypto++庫提供了很多密碼學演算法的實現。
?OpenSSL:OpenSSL是一個開放原始碼的實現了SSL及相關加密技術的軟體包,由加拿大的Eric Yang等發起編寫的。它可以實現訊息摘要、檔案的加密和解密、數位憑證、數位簽章和隨機數字等。 它的主要用途並不是大數庫,而是SSL協議的實現和應用,但是其中也有一些關於大整數的功能,此外它也是基於c語言。