高精度「-」アルゴリズム
1647 ワード
一、高精度「-」アルゴリズム
1.1高精度「-」を作成し、次の内容を覚えておくと、コードに余裕があります!
(1)まず高精度"+"と同様の処理方式で大きな整数を格納する
(2)次に記憶が完了したら,どのように演算するかを考える.
二、高精度「-」アルゴリズムの核心
2.1大整数ストレージ
•'+'-'*'/'のどちらを作成しても、大きな整数の格納フォーマットが同じであることを保証する必要があります.多くの場合、1つのシンボルだけの演算がないためです.
2.2減算の本質
•大整数相減算:C=A 3 A 2 A 1 A 0-B 2 B 1 B 0、2つのケースに分けて考えると、Ai-Bi-tが十分に減算されていれば、最終的なビット数はAi-Bi-t、十分に減算されていなければ、最終的なビット数はAi-Bi-t+10、実際には(t+10)%10の2つのケースです.
2.3その他に
(1)配列の中にある2つの大きな整数の大きさを判断することを学び,一般的には桁数が異なり,長さが長い方が大きくなり,桁数が同じであれば最高位から比較する,すなわち配列の最後のビットである.
(2)AがBより大きい場合-->直接計算し、そうでない場合-->-(B-A).
(3)プリアンブルゼロが発生する可能性があり、除去!
(4)ここでは2つの正の整数を扱うが,負の整数であれば必ずビット|A|+|B|または|A|-|B|を変換できる.
三、高精度「-」のコードテンプレートにコメントを追加
1.1高精度「-」を作成し、次の内容を覚えておくと、コードに余裕があります!
(1)まず高精度"+"と同様の処理方式で大きな整数を格納する
(2)次に記憶が完了したら,どのように演算するかを考える.
二、高精度「-」アルゴリズムの核心
2.1大整数ストレージ
•'+'-'*'/'のどちらを作成しても、大きな整数の格納フォーマットが同じであることを保証する必要があります.多くの場合、1つのシンボルだけの演算がないためです.
2.2減算の本質
•大整数相減算:C=A 3 A 2 A 1 A 0-B 2 B 1 B 0、2つのケースに分けて考えると、Ai-Bi-tが十分に減算されていれば、最終的なビット数はAi-Bi-t、十分に減算されていなければ、最終的なビット数はAi-Bi-t+10、実際には(t+10)%10の2つのケースです.
2.3その他に
(1)配列の中にある2つの大きな整数の大きさを判断することを学び,一般的には桁数が異なり,長さが長い方が大きくなり,桁数が同じであれば最高位から比較する,すなわち配列の最後のビットである.
(2)AがBより大きい場合-->直接計算し、そうでない場合-->-(B-A).
(3)プリアンブルゼロが発生する可能性があり、除去!
(4)ここでは2つの正の整数を扱うが,負の整数であれば必ずビット|A|+|B|または|A|-|B|を変換できる.
三、高精度「-」のコードテンプレートにコメントを追加
"""
bool cmp(vector &A,vector &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 sub(vector &A, vector &B)
{
vector 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
。 , 。