Получение каждой отдельной цифры от целого целого числа

Скажем, у меня есть целое число, названное 'счетом', который похож на это:

int score = 1529587;

Теперь то, что я хочу сделать, получают каждую цифру 1, 5, 2, 9, 5, 8, 7 от счета с помощью побитовых операторов (См. ниже примечания редактирования).

Я вполне уверен, это может быть сделано, так как я когда-то использовал похожий метод извлечь красные зеленые и синие значения из шестнадцатеричного значения цвета.

Как я сделал бы это?

Править
Это должны не обязательно быть побитовые операторы, я просто думал, что это будет более просто тот путь.

21
задан chux - Reinstate Monica 5 May 2017 в 15:20
поделиться

4 ответа

Вы используете оператор по модулю:

while(score)
{
    printf("%d\n", score % 10);
    score /= 10;
}

Обратите внимание, что это даст вам цифры в обратном порядке (т.е. сначала наименее значащая цифра). Если вам сначала нужна самая значимая цифра, вам нужно будет сохранить цифры в массиве, а затем прочитать их в обратном порядке.

41
ответ дан 29 November 2019 в 06:54
поделиться

Значения RGB хорошо ложатся на границы битов; десятичные цифры - нет. Я не думаю, что есть простой способ сделать это с помощью побитовых операторов. Вам нужно будет использовать десятичные операторы, такие как по модулю 10 (% 10).

4
ответ дан 29 November 2019 в 06:54
поделиться

Не изобретайте велосипед. У C есть sprintf не просто так. Поскольку ваша переменная называется счетом, я предполагаю, что это для игры, в которой вы планируете использовать отдельные цифры счета для отображения числовых глифов в виде изображений. В этом случае sprintf имеет удобные модификаторы формата, которые позволят вам установить счётчик с нуля, пробел и т. Д. До фиксированной ширины, которую вы, возможно, захотите использовать.

2
ответ дан 29 November 2019 в 06:54
поделиться

Согласен с предыдущими ответами.

Небольшое исправление: есть лучший способ печатать десятичные цифры слева направо без выделения дополнительного буфера. Кроме того, вы можете отобразить нулевой символ, если оценка равна 0 (цикл, предложенный в предыдущих ответах, ничего не выводит).

Это требует дополнительного прохода:

int div;
for (div = 1; div <= score; div *= 10)
    ;

do
{
    div /= 10;
    printf("%d\n", score / div);
    score %= div;
} while (score);
5
ответ дан 29 November 2019 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: