1. 10진수에서 2진수 만들기
function DecimalToBinary(n) {
console.log(`${n}의 이진수 구하는 DecimalToBinary() Start`);
let numsArr = new Array(); // 이진수를 담을 배열 생성
let binary;
if(n > 0) {
let naturalNum = n;
let firstBinary = naturalNum%2;
numsArr.push(firstBinary);
while(true){
if(naturalNum > 0){
naturalNum = Math.floor(naturalNum/2);
num = (naturalNum)%2;
numsArr.push(num);
} else {
break;
}
}
numsArr.reverse();
if(numsArr[0] === 0){
numsArr.shift();
}
}
binary = numsArr.join('');
console.log(`binary number : ${binary}`);
return binary;
}
console.time();
DecimalToBinary(300);
console.log("\n====================");
console.timeEnd();
console.log("DecimalToBinary() End");
2. 2진수에서 10진수 만들기
// 2진수에서 10진수 만들기
function BinaryToDecimal(n) {
console.log(`이진수 ${n}의 십진수 구하는 BinaryToDecimal() Start`);
let numsArr = new Array(); // 이진수를 담을 배열 생성
let DecimalNum;
let squareRoot;
let result = 0;
for(let i=0; i<n.length; i++){
numsArr.push(n[i]);
}
for(let i=0; i<numsArr.length; i++){
squareRoot = numsArr.length-1-i;
if(parseInt(numsArr[i]) === 1){
DecimalNum = Math.pow(2, squareRoot);
//console.log(`i : ${i}, squareRoot : ${squareRoot}, DecimalNum : ${DecimalNum}`);
result = result + DecimalNum;
}
}
console.log(`Decimal result : ${result}`);
return result;
}
console.time();
BinaryToDecimal("11001011");
console.log("\n====================");
console.timeEnd();
console.log("BinaryToDecimal() End");
3. 리팩토링
// 10진수에서 2진수 만들기
function convertDecimalToBinary(decimal) {
console.log(`convertDecimalToBinary::start => ${decimal}`);
if (decimal <= 1) {
return '';
}
const result = [];
while (true) {
if (decimal <= 1) {
result.push(decimal);
break;
}
result.push(decimal % 2);
decimal = Math.floor(decimal / 2);
}
console.log(`convertDecimalToBinary::finish.${result}`);
return result.reverse().join('');
// console.log(`${decimalNum}의 이진수 구하는 DecimalToBinary() Start`);
// let binaryNumArr = new Array(); // 이진수를 담을 배열 생성
//let result = [];
// if(decimalNum > 0) {
// let dividedNum = decimalNum;
// let firstBinaryNum = dividedNum % 2;
// binaryNumArr.push(firstBinaryNum);
// while(true){
// if(dividedNum > 0){
// dividedNum = Math.floor(dividedNum/2);
// remain = dividedNum % 2;
// binaryNumArr.push(remain);
// } else {
// break;
// }
// }
// }
// console.log(`binary number`);
// return binaryNumArr.reverse().join('');
}
// console.time();
// let binary = convertDecimalToBinary(300);
// console.log(binary);
// console.log("\n====================");
// console.timeEnd();
// console.log("DecimalToBinary() End");
const binary = convertDecimalToBinary(13);
console.log(`==>> ${binary}`);
// console.log(`==>> ${result == '1010'}`);
4. 리팩토링 2
// 10진수에서 2진수로 바꾸기 2번째
function getDecimalToBinary(decimal) {
console.log(`getDecimalToBinary :: start`);
if(decimal <= 1){
return '-1';
}
let binary;
let binaryContainer = [];
let devidedNumber = decimal;
if(decimal % 2 === 0) {
binaryContainer.push('0');
} else {
binaryContainer.push('1');
}
while (true) {
if(devidedNumber <= 1) {
break;
}
devidedNumber = Math.floor(devidedNumber / 2);
console.log(`devidedNumber 1 : ${devidedNumber}`);
binary = devidedNumber % 2;
binaryContainer.push(binary);
console.log(`devidedNumber 2 : ${devidedNumber}, binary : ${binary}`);
}
console.log(`binaryContainer : ${binaryContainer}`);
console.log(`getDecimalToBinary :: end`);
return binaryContainer.reverse().join('');
}
console.log("\n=========================");
console.time();
let binary = getDecimalToBinary(100);
console.log(binary);
console.log("\n=========================");
console.timeEnd();
'개발 > JavaScript' 카테고리의 다른 글
자바스크립트의 프로토타입 - 자바스크립트 핵심 가이드 (0) | 2024.02.22 |
---|---|
[Javascript] 최대공약수 구하기 (0) | 2023.09.28 |
[자바스크립트] 별 찍기 응용문제 2개 (0) | 2023.09.20 |
[러닝 자바스크립트] for...in과 hasOwnProperty() (0) | 2023.09.20 |
자바스크립트 호이스팅 및 스코프 문제 (0) | 2023.09.18 |