精密「 - 」アルゴリズム

高精度「 - 」アルゴリズム

高精度の1.1準備「 - 」、次のことを覚えて、コードが取得されます!

(1)まず、高精度「+」大きな整数を格納するために同じアプローチ

(2)は、ストレージ終わりに続いて、どのように操作を検討?

第二に、高精度の「 - 」は、コアアルゴリズム

2.1大きな整数ストレージ

•かどうかは、それが書かれている「+」「 - 非常に多くの場合、操作の唯一のシンボルが存在しないため、」「*」「/」、同じ大きな整数の保存形式を保証しなければなりません。

自然の2.2減算

•大きな整数減算:Al-Biの-Tの保存に十分な、最終的な中央値愛のBi-Tの場合はC = A3A2A1A0-B2B1B0、2例は、最終桁に比べて、減少していない場合に、考慮すべきです両方の場合において、実際に愛のBi-T + 10、(T + 10)10%です。

2.3また、私たちが知りたいです

(1)配列中の2つの大きな整数の大きさを判断することを学ぶ、中央値は、大きくなり、より長い長さは、一般的に異なる場合、配列の最後のビットである最上位ビットの比較から、同じビット数、 。

(2)AがBに等しいより大きい場合 - >直接オペレータ、または - > - (BA)。

(3)状況が取り除か先行ゼロを発生する可能性があります!

| B | - | A | | + | B |または| A(4)ここで、2つの正の整数を処理が、負の整数の場合、ビットに変換することができるであろう。

第三に、高精度「 - 」コードテンプレート

コメントを追加します

"""
bool cmp(vector<int> &A,vector<int> &B)//判断A是否大于等于B
{
    if(A.size() != B.size()) return A.size() > B.size();
    for(int i=A.size() - 1; i>=0; i--)
        if(A[i]!=B[i])
            return A[i]>B[i];
    return true;
}
"""
}
// C = A - B, 满足A >= B, A >= 0, B >= 0
vector<int> sub(vector<int> &A, vector<int> &B)
{
    vector<int> C;
    for (int i = 0, t = 0; i < A.size(); i ++ )
    {
        t = A[i] - t;
        if (i < B.size()) t -= B[i];
        C.push_back((t + 10) % 10);//分两种情况考虑,如果Ai-Bi-t够减,则最终的位数为Ai-Bi-t,如果不够减,最终的位数则为Ai-Bi-t+10
        if (t < 0) t = 1;
        else t = 0;
    }

    while (C.size() > 1 && C.back() == 0) C.pop_back();//去掉前导零
    return C;
}

作者:yxc
链接:https://www.acwing.com/problem/content/794/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

おすすめ

転載: www.cnblogs.com/lastk/p/12443379.html