Info2P5/adturing.c
2025-05-05 15:53:56 +02:00

35 lines
995 B
C

#include <string.h>
void dual_addiere_eins(const char *input, char *output, int maxlen) {
int len = strlen(input);
int carry = 1;
int i, j;
// Das Ergebnis wird rückwärts in ein temporäres Array geschrieben
char temp[maxlen];
temp[maxlen-1] = '\0'; // String-Ende
for (i = len - 1, j = maxlen - 2; i >= 0 && j >= 0; --i, --j) {
if (input[i] == '1') {
temp[j] = carry ? '0' : '1';
if (carry) carry = 1; // bleibt 1
} else if (input[i] == '0') {
temp[j] = carry ? '1' : '0';
carry = 0;
} else {
output[0] = '\0'; // Fehlerfall
return;
}
}
// Falls noch Übertrag übrig ist
if (carry && j >= 0) {
temp[j--] = '1';
}
// Rest auffüllen
while (j >= 0) temp[j--] = '0';
// Jetzt führende Nullen entfernen
int start = 0;
while (temp[start] == '0' && temp[start+1] != '\0') ++start;
strcpy(output, temp + start);
}