Как получить значение, увеличенное только в том случае, если цикл имеет значение BEST WAY?
ИЛИ просто исправить 2-й способ, пока (n! = 0 && i ++)
Я рекомендуюни один из подходов.
Нет необходимости в специальном тесте, чтобы увидеть, должен ли код увеличиваться i
.
do {
ch[i] = (n%2) + '0';
n /= 2;
i++;
} while(n != 0);
// Just decrement after the loop
i--;
for(j=0; j<=i; j++) {
printf("%c",ch[i-j]);
}
В качестве альтернативы вообще не уменьшать
do {
ch[i] = (n%2) + '0';
n /= 2;
i++;
} while(n != 0);
for(j=0; j<i; j++) {
printf("%c",ch[i-1-j]);
}
Или используйте do ... while
для печати.
do {
ch[i++] = (n%2) + '0';
n /= 2;
} while(n);
do {
printf("%c",ch[--i]);
} while (i);
Примечания:
char ch[8];
слишком мало для int
вне диапазона [-255 ... 255]
.Для 32-битного int
используйте char ch[32];
или шире.В общем, использование char ch[sizeof(int) * CHAR_BIT];
ch[i] = (n%2) + '0';
, безусловно, приведет к неожиданным результатам при n < 0
.Вместо этого рассмотрим unsigned
типов.