2つ以上の方法で2つの数字を交換.
11586 ワード
この問題に遭遇しなかったプログラマはいない.
一時変数を使用して2つの数値を交換することは一般的です.しかし、スワッピングの他の方法があります.私はいくつかの方法を列挙しています.
で導入される破壊課題を使用して番号を交換する前にES2015 , それを理解しましょう.
これを知って、今交換しましょう.
一時的な配列 破壊は起こる
このメソッドは単純な数学的論理を使って問題文を解決します.
整数のみをスワップできます の合計
この方法は再び論理的手法である.これは、以前の方法とほぼ同じですが、等級、すなわち、乗算の代わりに追加と除算の代わりに減算を使用します.
ゼロは、乗算と除算の敵です.数の一方が0の場合、このメソッドを使用しないでください.それは 避ける
このメソッドを使用する前に、XOR演算子を修正しましょう.2 or入力が異なる場合、XOR演算子はtrueを返す.以下の表を示します.
エー
b
A ^ B
0
0
0
0
1
1
1
0
1
1
1
0
このロジックを使うと、2つの整数を交換することができます.値5のVAR Aと値9のVAR Bを交換するステップを以下に示す. 変数AとBのバイナリ等価は以下の通りです.
A = 5 = 0101とB = 9 = 1001 値を保存する
b
A = A ^ B
0
1
1
1
0
1
0
0
0
1
1
0 値を保存する
b
A = B
1
1
0
1
0
1
0
0
0
0
1
1 値を保存する
b
A = A ^ B
1
0
1
1
1
0
0
0
0
0
1
1 この時点で変数Aは9であり、変数Bは5である値0101を保持する.したがって、我々は値が交換されるのを見ます.
数の整数部分を取得するので、小数点数をスワップできません.XORは入力が整数であると仮定し、したがって計算を実行する.しかし、浮動小数点数は整数ではなく、IEEE 754規格によって表されます.そして、それは3つの部分の数字を壊します:符号ビット、指数を表すビットのグループ、および1(包含)と2(排他的)の間の数を表す別のグループ、仮数.したがって、不正な値を取得します. 使えない
IFEまたはすぐに呼び出された関数式は、関数の直後に実行される関数です.これは、2つの数字を交換などのさまざまな仕事をするために使用することができます.
これは最も一般的な方法です.ここで、一時変数はスワッピングの値の1つを格納するために使用されます.
私は、見つけることができるスワップでgistを作成しましたhere .
スワッピングにはもっと多くの方法があります.私はいくつかの好ましい選択を挙げた.あなたがより多くの技術を知っているならば、コメントで彼らを共有するために自由に感じてください.
Write a program to swap two numbers.
一時変数を使用して2つの数値を交換することは一般的です.しかし、スワッピングの他の方法があります.私はいくつかの方法を列挙しています.
破壊課題
で導入される破壊課題を使用して番号を交換する前にES2015 , それを理解しましょう.
var a, b;
[a, b] = [33, 22, 11];
console.log(a, b) // 33 22
The [a, b] = [33, 22, 11]
は、配列を構造化する破壊課題です[33, 22, 11]
. 第1項目33は変数Aに、第2項目22は変数Bに割り当てられる.これを知って、今交換しましょう.
let a = 12, b = 24;
[a, b] = [b, a]; // destructuring assignment
console.log(`a = ${a}, b = ${b}`); // a = 24, b = 12
破壊的割当の段階的破壊[b, a]
値付きで[24, 12]
が生成される.[a, b] = [24, 12]
, 変数Aに値24を代入し、変数Bに値12を代入する.追加と差異
このメソッドは単純な数学的論理を使って問題文を解決します.
var a = 12, b = 24;
a = a + b; // a = 36
b = a - b; // b = 36 - 24 = 12
a = a - b; // a = 36 - 12 = 24
console.log(`a = ${a}, b = ${b}`) // a = 24, b = 12
しかし、この方法に制限があります.a = a + b
最初のステップでは、以下のNumber.MAX_SAFE_INTEGER
Note: You can do this swapping in one line :
num2 = num1 + ( num1 = num2 ) - num2;
I am using num1 and num2 for easy understanding
乗算と除算
この方法は再び論理的手法である.これは、以前の方法とほぼ同じですが、等級、すなわち、乗算の代わりに追加と除算の代わりに減算を使用します.
var a = 12, b = 24;
a = a * b; // a = 288
b = a / b; // b = 288 / 24 = 12
a = a / b; // a = 288 / 12 = 24
console.log(`a = ${a}, b = ${b}`) // a = 24, b = 12
この方法の制限について議論しましょう.NaN
. Infinity
and -Infinity
数の一つとして.その答えは再びNaN
. Note: You can do this swapping in one line :
num2 = num1 * ( num1 = num2 ) / num2;
I am using num1 and num2 for easy understanding
ビットOR演算子
このメソッドを使用する前に、XOR演算子を修正しましょう.2 or入力が異なる場合、XOR演算子はtrueを返す.以下の表を示します.
エー
b
A ^ B
0
0
0
0
1
1
1
0
1
1
1
0
このロジックを使うと、2つの整数を交換することができます.値5のVAR Aと値9のVAR Bを交換するステップを以下に示す.
A = 5 = 0101とB = 9 = 1001
a ^ b
into a
.a = a ^ b
エーb
A = A ^ B
0
1
1
1
0
1
0
0
0
1
1
0
a ^ b
into b
.b = a ^ b
エーb
A = B
1
1
0
1
0
1
0
0
0
0
1
1
a ^ b
into a
.a = a ^ b
エーb
A = A ^ B
1
0
1
1
1
0
0
0
0
0
1
1
var a = 12, b = 24;
a = a ^ b;
b = a ^ b;
a = a ^ b;
console.log(`a = ${a}, b = ${b}`) // a = 24, b = 12
では、このメソッドの制限を見てみましょう.Infinity
and -Infinity
浮動小数点整数で、上記と同じ問題に直面します.を使用する
IFEまたはすぐに呼び出された関数式は、関数の直後に実行される関数です.これは、2つの数字を交換などのさまざまな仕事をするために使用することができます.
var a = 12, b = 24;
a = (function (b) {
return b;
})(b, b = a)
console.log(`a = ${a}, b = ${b}`) // a = 24, b = 12
I won't prefer this method. Just included for sharing knowledge.
一時変数の使用
これは最も一般的な方法です.ここで、一時変数はスワッピングの値の1つを格納するために使用されます.
var a = 12, b = 24, temp;
temp = a; // temp = 12
a = b; // a = 24
b = a; // b = 12
console.log(`a = ${a}, b = ${b}`) // a = 24, b = 12
結論
私は、見つけることができるスワップでgistを作成しましたhere .
スワッピングにはもっと多くの方法があります.私はいくつかの好ましい選択を挙げた.あなたがより多くの技術を知っているならば、コメントで彼らを共有するために自由に感じてください.
Reference
この問題について(2つ以上の方法で2つの数字を交換.), 我々は、より多くの情報をここで見つけました https://dev.to/ishanbagchi/swapping-2-numbers-in-more-than-2-ways-4og0テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol