0

大きな整数をモデル化するクラスを作成しています。データと呼ばれるベクトル ポインターに unsigned int としてデータを格納しています。この関数が行うことは、現在の大きな整数に n を追加することです。私のパフォーマンスを遅くしているように見えるのは、長い長い値を使用しなければならないことです。これを回避する方法を知っている人はいますか。現在、合計を長くする必要があります。そうしないと、オーバーフローします。

void Integer::u_add(const Integer & n)
{
    std::vector<unsigned int> & tRef = *data;
    std::vector<unsigned int> & nRef = *n.data;
    const int thisSize = tRef.size();
    const int nSize = nRef.size();
    int carry = 0;
    for(int i = 0; i < nSize || carry; ++i)
    {
        bool readThis = i < thisSize;
        long long sum = (readThis ? (long long)tRef[i] + carry : (long long)carry) + (i < nSize ? nRef[i] : 0);
        if(readThis)
            tRef[i] = sum % BASE; //Base is 2^32
        else
            tRef.push_back(sum % BASE);
        carry = (sum >= BASE ? 1 : 0);
    }
}

また、ポインター自体を使用するだけでなく、ポインターへの参照を使用する利点があるかどうか疑問に思っていますか? つまり、データにアクセスするには tRef[i] または (*data)[i] を使用する必要があります。

4

1 に答える 1