2011-06-10 61 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类非常认真,那么我建议您阅读表达式模板,以此来降低自然代码中临时对象的成本。