wie kann ich ein Java Program erzeugen, das Binärzahlen beliebiger Länge addiert?

... komplette Frage anzeigen

3 Antworten

Eine Klasse, die so was leistet, nennt sich BigInteger oder BigInt.

Dazu findest du mehr als genug Informationen im Internet, auch wie man so etwas implementieren kann.

Oder musst du tatsächlich jedes Bit einzeln gespeichert haben, womöglich noch als char?

Und wieso kannst du das Ergebnis nur als Dezimalzahl ausgeben?

Für die beliebige Länge: Kennst du die (generische) Klasse List? Kannst du Ausnahmen abfangen?

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von TeeTier
22.02.2016, 00:10

Merke: Während dem Tippen einer Antwort nicht zwischendurch Abendbrot essen, sonst kommt einem jemand anderes zuvor und schickt seine Antwort 18 Minuten schneller ab. :)

1
Kommentar von Azasel
22.02.2016, 06:34

XD

0
Kommentar von Mariposaa94
22.02.2016, 10:36

Hallo, danke erst mal für deine Hilfsbereitschaft :) .. Also beliebig lang heißt anscheinend unendlich lange Binärzahlen. Ich habe es mit char versucht, aber nicht hinbekommen .. denke grad an eine Funktion mit String. Könnte man damit was machen?

0

Beliebige Länge wird man nicht hinbekommen. Dabei gibt es, wegen dem Hauptspeicher, eine obere Grenze. Wie lang sollen die Bitstrings ungefähr werden können? Größenordnung ist hier gefragt. Gruß :)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Mariposaa94
22.02.2016, 10:33

die Aufgabenstellung sagt beliebig lang. Ich denke es heißt einfach unendlich viel? Habe da an "char" gedacht, denkst du damit könnte man in die richtige Richtung gehen?

0
Kommentar von Reyha24
22.02.2016, 11:42

Beliebig lang ist natürlich unmöglich. Denke es werden keine xx Millionen sein, also würde ich eine Array von chars verwalten, worauf du dann die Addition durchführst. Dabei den, im Zweifelsfall, größeren Bitstring in das Array packen und schließlich Bit für Bit addieren und das Ergebnis wieder in dem Array speichern. Gruß :)

0
Kommentar von Reyha24
22.02.2016, 11:44

Wobei lieber List

als ein Array verwenden :) Muss ja dynamisch sein, hatte das verplant :P

0
Kommentar von PWolff
22.02.2016, 14:47

"Beliebig lang" heißt bei endlichen (insbesondere realen) Systemen "solange der Speicherplatz ausreicht".

Auf Verdacht 6 GB für ein paar Strings zu reservieren wäre maßlos übertrieben.

0

Etwa so:

import java.math.BigInteger;

// ,,,

String str = "10110 10 1000010100110 111010 1 0 101";

String[] parts = str.trim().split("\\\\s+");
BigInteger sum = BigInteger.ZERO;

for (String part : parts) {
System.out.printf("+%30s\\n", part);

sum = sum.add(new BigInteger(part, 2));
}

System.out.printf("\\n=%30s\\n", sum.toString(2));

Damit solltest du zurecht kommen. :)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von TeeTier
22.02.2016, 00:14

PS: Anstatt die Breite fix mit 30 anzugeben, kannst du auch erst mal die Summe berechnen, deren Breite in String-Form auslesen, und dieses Ergebnis dann für die Ausrichtung benutzen.

Die "30" habe ich jetzt nur genommen, weil mir nicht ganz klar war, was du genau unter "beliebig" verstehst. :)

0
Kommentar von Mariposaa94
22.02.2016, 10:32

vielen Dank! Beliebige Länge soll heißen, dass es unendlich lange Binärzahlen speichern kann. du hast ja //,,, was soll ich denn da eintragen? bin nicht so gut in programmieren.. 

0
Kommentar von Mariposaa94
22.02.2016, 11:12

Hi hab jetzt dein Code mal ausprobiert, also wenn man die Main Methode etc. hinzufügt, kommt leider ein falsches Ergebnis raus. 

0
Kommentar von Mariposaa94
22.02.2016, 15:14

Jab! Du hast Recht! Hat geklappt vielen lieben Dank!

1

Was möchtest Du wissen?