#include // Addiert 1 zu einer Dualzahl (als String) und speichert das Ergebnis in output // input: Dualzahl als String, z.B. "1011" // output: Ergebnis als String, z.B. "1100" // maxlen: Maximale Länge des output-Arrays (inklusive '\0') 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, pos = 0; // i: läuft durch input, pos: Position im temp-Array char temp[maxlen]; // Temporäres Array für das Ergebnis (rückwärts) // maxlen reicht, da Ergebnis maximal 1 Stelle länger als input sein kann // Von hinten (letztes Zeichen) nach vorne durchgehen for (i = len - 1; i >= 0; --i) { if (input[i] == '1') { // Wenn aktuelle Ziffer 1 ist if (carry) { temp[pos++] = '0'; // 1 + 1 = 0, Übertrag bleibt 1 } else { temp[pos++] = '1'; // 1 + 0 = 1, kein Übertrag mehr } // carry bleibt 1, wenn wir 1+1 gerechnet haben } else if (input[i] == '0') { // Wenn aktuelle Ziffer 0 ist if (carry) { temp[pos++] = '1'; // 0 + 1 = 1, Übertrag wird 0 carry = 0; } else { temp[pos++] = '0'; // 0 + 0 = 0, kein Übertrag } } else { output[0] = '\0'; // Fehlerfall: ungültiges Zeichen in input return; } } // Falls nach der Schleife noch ein Übertrag übrig ist (z.B. 111 + 1 = 1000) if (carry) { temp[pos++] = '1'; // Setze noch eine 1 ganz vorne } temp[pos] = '\0'; // String-Ende setzen // Jetzt temp umdrehen und in output kopieren // temp enthält das Ergebnis rückwärts, also müssen wir es umdrehen for (i = 0; i < pos; ++i) { output[i] = temp[pos - 1 - i]; } output[pos] = '\0'; // String-Ende setzen }