Zamiana systemu dziesiętnego na binarny

0

Piszę rozwiązanie do zadania z code wars https://www.codewars.com/kata/59fca81a5712f9fa4700159a/train/javascript. Mianowicie chciałbym napisać kod który przeliczy mi z systemu dziesiętnego na binarny. Napisałem taki prosty kod

function calculate(n){
	let resultOfDivision = n / 2;
	return resultOfDivision;
}
function restOfDivsionByTwo(calculate){
	let restOfDivision = calculate % 2;
	return restOfDivision;
}
restOfDivsionByTwo(5);

jedna funkcja mi liczy wynik z dzielenia a druga resztę z dzielenia. I to działa tylko że dla liczby 1 bo teraz muszę napisać warunek sprawdzający czy wynik z funkcji calculate jest większy od zera i ten kod który jest w tej funckji musi się wykonywać tyle razy nie dopóki wynik działania nie będzie równy 0. I moje pytanie jest takie. Jak do tego podejść. Napisać ten warunek w funkcji calculate czy lepiej odrębną funckje która będzie sprawdzać ten warunek i na tej podstawie będzie określać ile razy funkcja calculate ma się jeszcze wykonać.

2

Jakbyś chciał na skróty pójść to liczby w JS mają metodę toString, która przyjmuje parametr radix:

n.toString(2);  // np. jeśli n == 6, to zwróci "110"

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString

0

A że tak zapytam. Konwersja systemu dziesiętnego na binarny polega na dzieleniu określonej liczby przez 2, uzyskanie wyniku z dzielenia a także reszty z tego dzielenia. Zasada jest taka że jeśli mam liczbę 1 to ten kod który napisałem tak naprawdę wystarczy tyle że problem pojawia się przy liczbach większych od 1. Dlatego że należy napisać warunek sprawdzający czy wynik z dzielenia jest większy od 0 i jeśli jest to wykonuje się dotąd dopóki nie dotrze do 0 (czyli dopóki 0 nie będzie równe 0). Natomiast gdy osiągnie wartość to popierwsze powiniene być warunek który sprawdza czy 0 > 0 no i to jest fałsz i tym samym przerywam wykonywanie instrukcji warunkowej. Tylko żeby móc dojść do określonej wartości jaką jest 0 przydałoby się wykorzystać tutaj pętle. I chciałbym się dowiedzieć czy pętla while lub ewentualnie do while by zdały egzamin?

2

To nie jest tak, że liczba na wejściu jest dziesiętna. Liczby w komputerach zawsze są zapisywane w jakiś sposób binarnie. To co chcesz, to chcesz uzyskać binarną reprezentację liczby. Nie liczby dziesiętnej, po prostu liczby. Przepraszam za może nie do końca pomocny post, ale może pomoże trochę w zrozumieniu.

1

Dziękuję za pomoc. Napiszę swoje rozwiązanie ale chciałbym poznać też twoje

Np. sposób z dzieleniem przez 2:

const number = 7;
const base = 2;

let v = number, s = '';
while (v >= 1) {
	s = (v % base) + s ;
	v = Math.floor(v / base);
}

sposób z bitami:

const toB = n => { 
   let s = ''; 
   for (let i = 0; n >= 1 << i;  s = (n >> i++ & 1) + s) ;  
   return s;
}

sposób z iterowaniem kolejnych potęg:

const number = 7;
const base = 2;

let left = number;
let divisor = base;
let arr = [];
do {
    const v = left % divisor;
    arr.unshift(v / (divisor / base));
    left -= v;
    divisor *= base;
} while (left);

console.log(arr.join('')); 

(tu zamiast stringa s użyłem tablicy, ale to akurat nie wpływa na sam algorytm. Mógłbym tu zrobić dodawanie stringow tak jak w poprzednich)

1 użytkowników online, w tym zalogowanych: 0, gości: 1