dezimaler string -> binärer string (nicht trivial!)



  • Gemeint ist: string, der eine dezimale zahl respräsentiert, in einen string, der eine binäre zahl respräsentiert, umzuwandeln.

    Beispiel:
    input: char[] input = "3"
    output char[] output = "11"

    Soweit so gut. Das Problem ist nun, dass der input string beliebig lang werden kann. Daher entfällt die variante: in int umwandeln, dann in binär umwandeln, dann wieder in string umwandeln.

    Gesucht ist also eine Möglichkeit den input so umzuwandeln, dass man keine gigantischen Zahlen braucht.

    Mein erster Gedanke war, den input string einfach sequenziell zu betrachten, um dann so mit relativ kleinen Zahlen rechnen zu können.
    Bei einem hexadezimalen input string wäre das ganz einfach: So kann man da die Ziffern einfach einzeln zu betrachten:

    Beispiel:
    input: char[] input = "35"
    Algorithmus: aus 3 hex wird 0011 binär; aus 5 hex wird 0101 binär --> zusammengesetzt: 00110101 -->
    output: char[] output = "110101"

    Ich hab jedoch leider noch keine Lösung gefunden, wie man es bei einem dezimalen input string machen könnte.. Wäre für jeden Vorschlag dankbar :>



  • life schrieb:

    Soweit so gut. Das Problem ist nun, dass der input string beliebig lang werden kann. Daher entfällt die variante: in int umwandeln, dann in binär umwandeln, dann wieder in string umwandeln.

    och, würde ich nicht so sagen. solange der int noch auf die platte paßt.

    ich sehe keine lösung mit konstantem speicherbedarf.

    wenn der dezimalstring ins ram paßt, kannste auch auf dem rumrechnen. dauert eben ein bißchen länger.



  • hab jetzt eine Lösung gefunden:

    Beispiel:
    input: "34" (dezimal)
    algorithmus: betrachte erste Ziffer --> 4; Umrechnen in binär -> 0100; zu output hinzufügen --> output: "00000100"; betrachte zweite Ziffer --> 3; Umrechnen in binär --> 0011; in temporärer string hinzufügen und verschieben um 3 nach links (d.h. mit 2^3 multiplizieren) --> "00011000"; in temporärer string hinzufügen und verschieben um 1 nach links (d.h. mit 2 multiplizieren) --> "00000110"; Temporäre variablen zu output hinzuaddieren (wenn hier z.b. die 100stelle bei dem dezimalstring wäre, müsste man das ergebnis der addition der temporären stings wieder benutzen und die beiden letzten schritte wiederholen, also ziffer * (2^3+2) * (2^3+2) bei 100 stelle) --> "00100010"
    output: "00100010"

    Natürlich hat man jetzt die temporären strings, aber wenn man das (a+b)^n auflösen würde, könnte man auf die auch verzichten und hätte nur noch die binäre darstellung der einzelnen ziffern als temproräre variablen und somit ein konstanten speicherverbrauch :>..


Anmelden zum Antworten