高精度「 - 」アルゴリズム
高精度の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
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。