2017-03-13 2 views
0

Ich lösen ein Leetcode-Problem, das die Ausgabe muss eine Binärzahl ohne reichlich Ziffern sein.Verwendung von dynamischen Bitset zum Konvertieren von Dezimalzahlen

Ich habe die Dezimalzahl und ich habe versucht, Bitset zu verwenden, um die Konvertierung durchzuführen.

schrieb ich eine Funktion, um die Anzahl der Ziffern die Zahl n gegeben zurückzukehren:

int digitNum (int n){ 
    int digit = 0; 
    while(n!=0){ 
     n/=2; 
     digit++; 
    } 
    return digit; 
} 

Aber wenn ich es nannte,

int digit = digitNum(res); 
result = bitset<digit>(res).to_string(); 

die Ziffer muss eine Konstante. Ich lese das boost :: bitset, und ich sehe nicht, wie ich ein dynamisches Bitset verwenden kann, um mein Problem zu beheben. http://www.boost.org/doc/libs/1_63_0/libs/dynamic_bitset/dynamic_bitset.html

weil es jedes Bit von Hand definiert. Es wird nicht mehr in binär konvertiert.

+0

Wenn Sie Fehler bauen, copy-paste jene Fehler (* als Text *) in den Körper der Frage statt bauen. Dann schließe z.B. Kommentare im Code, um zu zeigen, wo die Fehler liegen. –

+0

Was Ihr Problem anbelangt, sind Vorlagen eine reine Kompilierungsfunktion von C++. Vorlagen können zur Laufzeit nicht erstellt werden. Abhängig von Ihrem Compiler sollten Sie * constexpr * recherchieren. –

+2

Ein Bild sagt mehr als tausend Worte. Ein Bild eines Wortes sagt mehr als tausend Worte - in Dateigröße. Veröffentlichen Sie keine Bilder von Code. –

Antwort

0

Bitset ist eine Vorlage. Jede Option in <> wird zur Kompilierzeit generiert, sodass sie zur Laufzeit keine Parametervariablen aus einer Variablen zur Laufzeit auswählen können. Sie können viel eine Schleife verwenden, wie ein vorhandenes die gleiche Arbeit wie bitset zu tun:

string numToBits(int number) 
{ 
    if (number == 0) 
     return "0"; 

    string temp; 

    int n = (number > 0) ? number : - number; 

    while (n > 0) 
    { 
     temp = string((n & 1) ? "1" : "0") + temp; 
     n = n/2; 
    } 

    if(number < 0) 
     temp = "-" + temp; 

    return temp; 
} 
Verwandte Themen