두 가지 이상의 방식으로 두 개의 번호를 교환하다.
Write a program to swap two numbers.
임시 변수를 사용하여 두 개의 숫자를 교환하는 것은 매우 흔하다.그러나 다른 교환 방식도 있다.나는 몇 가지 방법을 열거했다.
할당 해제
ES2015에서 소개한 해체부치 교환 숫자를 사용하기 전에 그것이 무엇인지 알아보자.
var a, b;
[a, b] = [33, 22, 11];
console.log(a, b) // 33 22
[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
보다 낮아야 한다NaN
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
이 접근 방식의 한계에 대해 살펴보겠습니다.0은 곱셈과 나눗셈의 적이다.숫자 중 하나가 0이면 이 방법을 사용하지 마십시오.이로 인해
Infinity
-Infinity
와 NaN
를 숫자 중의 하나로 삼는 것을 피한다.답은 다시 발생할 것이다a ^ b
.Note: You can do this swapping in one line :
num2 = num1 * ( num1 = num2 ) / num2;
I am using num1 and num2 for easy understanding
비트별 또는 연산자
이 방법을 사용하기 전에 XOR 연산자를 수정합니다.두 입력이 다르면 XOR 연산자가 true로 돌아갑니다.아래 표와 같다.
하나
b
a^b
0
0
0
0
1
1
1
0
1
1
1
0
이런 논리를 사용하면 우리는 두 개의 정수를 교환할 수 있다.값이 5인 var a와 값이 9인 var b를 교환하는 절차는 다음과 같다.
a=5=0101,b=9=1001
a
에 저장됩니다.a = a ^ b
하나b
a=a^b
0
1
1
1
0
1
0
0
0
1
1
0
a ^ b
에 저장됩니다.b = a ^ b
하나b
b=a^b
1
1
0
1
0
1
0
0
0
0
1
1
b
에 저장됩니다.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
이제 이러한 접근 방식의 한계를 살펴보겠습니다.a ^ b
와a
를 사용할 수 없다. 왜냐하면 그들은 부점 정수이고 위와 같은 문제에 직면하기 때문이다.iLife 사용
IIFE 또는 즉시 호출된 함수 표현식은 함수 생성 후 즉시 실행되는 함수입니다.그것은 두 개의 숫자를 교환하는 등 여러 가지 일을 할 수 있다.
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.
임시 변수 사용
이것은 가장 상용하는 방법이다.교환에 사용할 값을 저장하기 위해 임시 변수를 사용합니다.
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
결론
교환의 요점을 만들었습니다. 찾을 수 있습니다. here
교환하는 방법은 아직 많다.나는 몇 가지 더 좋은 선택을 열거했다.만약 당신이 더 많은 기교를 알고 있다면, 평론에서 공유할 수 있습니다.
Reference
이 문제에 관하여(두 가지 이상의 방식으로 두 개의 번호를 교환하다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ishanbagchi/swapping-2-numbers-in-more-than-2-ways-4og0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)