我正在编写自己的bignum类以进行大量运算。到目前为止,我已经重载了operator=operator+。我如何进行长除法?

另外,现在我只能将整数范围内的值分配给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();
}

最佳答案

为了分配大数字,通常的方法是字符串。这通常仅发生在您的计算接口(interface)上,因此不是问题。另一种方法是让模板构造器接受一系列字符,您将这些字符解释为Two's Compliment数字(我更喜欢这种方法,但是我没有看到它经常使用)。

如果您真的想实现BigNum类,那么我建议您阅读有关Expression Templates的一种方法,该方法可以减少看起来自然的代码中的临时成本。

关于c++ - C++中的Bignum除法和值赋值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6307352/

10-10 21:38