2011-06-10 42 views
1

我正在編寫我自己的bignum類,以便在大數量下操作。到目前爲止,我已經超過了operator=operator+。我如何進行長期劃分?bignum divison和C++中的值賦值

另外,現在我只能將整數範圍內的值賦給bignum對象。如何分配超出int範圍的值?沒有字符串可以做到這一點嗎?

#include <iostream> 

using namespace std; 
class bignum 
{ 
public: 
    int number[20]; 
    bignum operator + (bignum); 
    bignum operator = (int); 
    void output() 
}; 

bignum bignum::operator= (int j) 
{ 
    int f; 
    f=j; 
    for(int k=0; k<=19; k++) 
    { 
     number[k]=0; 
    } 
    for(int l=19; l>=0,f>0; l--) 
    { 
     number[l]=(f%10); 
     f/=10; 
    } 
} 

bignum bignum::operator+ (bignum b) 
{ 
    bignum a; 
    int carry=0; 
    for(int k=0; k<=19; k++) 
    { 
     a.number[k]=0; 
    } 
    for(int i=19; i>=0; i--) 
    { 
     a.number[i]= number[i]+b.number[i]+a.number[i]; 
     if(a.number[i]>9) 
     { 
     carry=(a.number[i]/10); 
     a.number[i-1]+=carry; 
     a.number[i]=(a.number[i]%10); 
     } 
    } 

    return a; 
} 

int main() 
{ 
    bignum a,b,c; 
    a=9999; 
    b=a+a; 
    //for(int k=1; k<=9; k++) 
    //b.number[k]=0; 
    //b=a+a; 
    for(int k=0; k<=19; k++) 
    cout<<b.number[k]; 
    cin.get(); 
} 
+0

如果您需要處理非常大的數字,那麼aproximation算法就是這樣。此外,對於分配,最好使用十六進制字符串而不是十進制(如果您的數字標識使用二進制形式表示,則它的CPU佔用率將遠遠小於解碼十六進制數) – Spektre 2013-09-05 23:16:50

回答

1

對於分配大數字,通常的方法是字符串。這通常只發生在你的計算界面上,所以不是問題。另一種方法是有一個模板構造函數,它將一系列字符解釋爲Two's Compliment數字(我更喜歡這種方法,但我沒有看到它經常使用)。

如果您對實施BigNum類非常認真,那麼我建議您閱讀表達式模板,以此來降低自然代碼中臨時對象的成本。