1

私は、大きな数を操作するための独自の bignum クラスを作成しています。これまでのところ、operator=andをオーバーロードしてきました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();
}
4

1 に答える 1

1

大きな数字を割り当てるための通常の方法は文字列です。これは通常、計算へのインターフェイスでのみ発生するため、問題はありません。もう1つの方法は、Two's Compliment番号として解釈するcharの範囲を取得するテンプレートコンストラクターを用意することです(私はこの方法を好みますが、あまり頻繁に使用されることはありません)。

BigNumクラスの実装に真剣に取り組んでいる場合は、自然に見えるコードの一時的なコストを削減する方法として、式テンプレートについて読むことをお勧めします。

于 2011-06-10T14:06:16.707 に答える