#include // Addiert 1 zu einer Dualzahl (als String) und speichert das Ergebnis in output void dual_addiere_eins(const char *input, char *output, int maxlen) { int len = strlen(input); // Länge der Eingabe bestimmen int carry = 1; // Übertrag (wir addieren 1, daher am Anfang 1) int i, j; // Schleifenvariablen char temp[maxlen]; // Temporäres Array für das Ergebnis (rückwärts) temp[maxlen-1] = '\0'; // String-Ende setzen // Von hinten (letztes Zeichen) nach vorne durchgehen for (i = len - 1, j = maxlen - 2; i >= 0 && j >= 0; --i, --j) { if (input[i] == '1') { // Wenn aktuelle Ziffer 1 ist temp[j] = carry ? '0' : '1'; // Mit Übertrag: 1+1=0 (Übertrag bleibt), sonst 1 // carry bleibt 1, wenn carry==1 und input[i]=='1' } else if (input[i] == '0') { // Wenn aktuelle Ziffer 0 ist temp[j] = carry ? '1' : '0'; // Mit Übertrag: 0+1=1 (Übertrag wird 0), sonst 0 carry = 0; // Übertrag ist jetzt weg } else { output[0] = '\0'; // Fehlerfall: ungültiges Zeichen return; } } // Falls nach der Schleife noch ein Übertrag übrig ist (z.B. 111 + 1 = 1000) if (carry && j >= 0) { temp[j--] = '1'; // Setze noch eine 1 ganz vorne } // Rest mit Nullen auffüllen (falls nötig) while (j >= 0) temp[j--] = '0'; // Führende Nullen entfernen (außer die letzte Ziffer) int start = 0; while (temp[start] == '0' && temp[start+1] != '\0') ++start; strcpy(output, temp + start); // Ergebnis in output kopieren }}