void binaryToString(char *binaryFull, char *decimalString) {
int zeroCounter = 0;
while (binaryFull[zeroCounter] == '0') {
zeroCounter++;
}
while (binaryFull[0] != '\0') {
int R = 0;
char binaryStack[110] = "";
for (int i = 0; i < strlen(binaryFull) - zeroCounter; i++) {
R = 2*R + i;
if (R >= 10) {
binaryStack[i] = '1';
R -= 10;
} else {
binaryStack[i] = '0';
}
}
binaryStack[strlen(binaryFull) - zeroCounter] = '\0';
printf("%s\n", binaryStack);
int j = 0;
while (binaryStack[j] == '0') {
j++;
}
for (int i = 0, k = j; i < strlen(binaryStack) - j; i++, k++) {
binaryFull[i] = binaryStack[k];
}
binaryFull[strlen(binaryStack) - j] = '\0';
}
}
Но не получается
zeroCounter
как я понял нужен для реализации шага "Remove leading "0" from X'", но эта реализация неправильная. К тому же она находится вне цикла while ( X != "0" )
.for (b in bits of X) // msb to lsb
говорит о том, что b должен пробегать двоичные цифры, от старшего разряда к младшему, в формуле R = 2*R + b
фигурирует значение разряда, а не его индекс, как в твоём коде.R, как я понимаю, должна быть очередная десятичная цифра получающегося числа?