35 lines
995 B
C
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);
|
|
} |