Mein Problem ist ich weiß nicht wie ich mit dem c-carry umgehen soll.
Es gibt verschiedene Möglichkeiten diese Problematik anzugehen. Eine (nicht elegante) Möglichkeit wäre das Speichern des Carry-Bits in einer eigenen Datenstruktur, die dann bei Bedarf abgefragt wird.
Die weitaus effizientere Variante ist das Berechnen des Carry-Bits on-the-fly. Dies ist durch folgende (Java-)Funktion möglich:
public static int[] add(int[] A, int[] B){
int n = A.length;
int[] C = new int[n + 1];
// Carry-Bit
int carry = 0;
for(int i = n - 1; i >= 0; i--){
C[i+1] = (A[i] + B[i] + carry) % 2;
// Neuberechnung des Carry-Bits (0/1).
carry = (A[i] + B[i] + carry)/2;
}
// Carry-Bit an die erste Stelle schreiben.
C[0] = carry;
return C;
}
Zum Testen benötigst Du eine Ausgabefunktion:
public static void print(int[] to_print){
Arrays.stream(to_print).forEach(System.out::print);
}
Diese Funktion wurde mit den Bordmitteln von Java 8 implementiert und benötigt den Import
import java.util.Arrays;
In der Main kannst Du exemplarisch einige Werte testen:
public static void main(final String... args) {
int[] a = new int[]{1,1,1,1,1};
int[] b = new int[]{1,1,1,1,1};
print(add(a,b));
}
Übrigens: Mir hat es bei der Entwicklung von Pseudocode im Umfeld der technischen Informatik immer geholfen, die Schaltpläne für die Umsetzung der arithmetischen Operationen zu studieren und daraus die benötigten Rechenoperationen abzuleiten.