2016-04-13 15 views
0

Ich bin neu in der Programmierung und Javascript und wurde gebeten, für eine Aufgabe, um Basis 10 Zahlen in eine binäre Basis zu konvertieren, ohne Verwendung von speziellen Javascript Methoden (wie alert (a.toString (16))), und ich darf nur Schleifen, Arrays und Funktionen verwenden. Das ist was ich bisher habe:Konvertieren einer Basis 10 Nummer in andere Basen 2 ohne eingebaute Javascript Funktionen

var number = prompt("Enter an unsigned base 10 number"); 
    if (number>=0) { 
     var base = prompt("Enter b for binary, o for octal, or h for hexadecimal"); 

     if (base=="h"||base=="H") { 
      ; 
     } 

So wie Sie sehen können, habe ich nicht viel zu machen. Ich war neugierig, welche Gleichung oder Formel ich verwenden würde, um die Basis 10-Zahl zu konvertieren, und auch, wie ich A = 10, B = 11, C = 12 usw. für eine hexadezimale Basis zeigen soll. Jede Hilfe würde sehr geschätzt werden!

+0

Möchten Sie auf Binary konvertieren müssen (2 basiert) oder hexadezimal (16 basiert)? –

+0

Zu allen dreien, binär, hexadezimal und oktogonal. Abhängig von der Basis, zu der der Benutzer konvertieren möchte, wird der Code für diese spezifische Basis ausgeführt. – LA495

+0

Sie scheinen nach einem Algorithmus zu sein (z. B. [* Ändern Sie eine Zahl von Basis 10 auf eine andere Basis *] (http://mathbits.com/MathBits/CompSci/Introduction/frombase10.htm)). Sobald Sie das gefunden haben, sollten Sie versuchen, es zu programmieren. Das ist der Schritt, für den diese Site ist. – RobG

Antwort

0

edit:Dies ist eine ziemlich komplizierte Art und Weise, es zu tun, wie Alnitak mir gezeigt (siehe Diskussion unten). Es ist mehr ein Scibble, oder der lange Weg zu Fuß.

Kurze Erklärung:

Wenn wir die binäre der Dezimalzahl 10, bekommen haben wir 2^n so versuchen, dass 2^n ist immer noch kleiner als 10 Zum Beispiel 2^3 = 8 (das OK ist). Aber 2^4 = 16 (das ist zu groß). So haben wir 2^3 und speichern eine 1 für die in einem Array bei Index 3.

Jetzt müssen wir den Rest 10-2^3 erhalten, die 2 ist, und müssen wieder die gleiche Berechnung machen, bis wir eine Differenz erhalten von Null.

Endlich müssen wir das Array umkehren, weil es umgekehrt ist.

var a = prompt("Enter an unsigned base 10 number"); 
 
var arr = []; 
 
var i = 0; 
 

 
function decToBin(x) { 
 
    y = Math.pow(2, i); 
 
    if (y < x) { 
 
    arr[i] = 0; 
 
    i++; 
 
    decToBin(x); 
 
    } else if (y > x) { 
 
    i--; 
 
    newX = (x - Math.pow(2, i)); 
 
    arr[i] = 1; 
 
    i = 0; 
 
    decToBin(newX) 
 
    } else if (y == x) { 
 
    arr[i] = 1; 
 
    result = arr.reverse().join(); 
 
    } 
 
    return result; 
 
} 
 

 
var b = decToBin(a); // var b holds the result 
 

 
document.write(b);

+0

Das erscheint unnötig kompliziert - meine Version ist 'Funktion decToBin (x) {zurück (x? DecToBin (Math.floor (x/2)): '') + (x% 2)}' (mit der Einschränkung, dass dies immer fügt eine führende Null) – Alnitak

+0

hinzu und wenn die Zahlen im Bereich 0 .. 2^31 - 1 beschränkt sind, kann der 'Math.floor (x/2)' durch 'x >>> 1' – Alnitak

+0

@ Alnitak Thx für ersetzt werden Dein guter Rat. Du bist ein viel besserer Coder. Ich lerne immer noch viel. Aber ich versuche so viel wie möglich zu helfen. Eigentlich bin ich Designer. – John

Verwandte Themen