Си, вывод чисел наоборот

Пишу программу для перевода из десятичной системы счисления в любую другую, пока без перевода чисел в буквы.

Вопрос: Как мне вывести мой остаток от деления наоборот? Сейчас он выводится так:

    int main()
    {
        unsigned int n, k;
        printf("n = ");
        scanf("%i", &n);
        printf("k = ");
        scanf("%i", &k);

        if (n < k)
        {
            printf("%i", n);
        }
        else{
            while (n > 0)
            {
                printf("%i ", n % k);
                n = (int)n / k;
            }
        }

    }

Например при 10 в двоичной системе вывод будет: 0 1 0 1, а мне нужен наоборот 1 0 1 0.

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


Ответы (1 шт):

Автор решения: Кирилл Малышев
#include <stdio.h>
#include <limits.h>

int main()
{
    unsigned int n, k;
    printf("n = ");
    scanf("%i", &n);
    printf("k = ");
    scanf("%i", &k);

    if (n < k)
    {
        printf("%i", n);
    }
    else{
        // Создаём массив под 33 элемента, заполненный нулями
        char buf[sizeof(unsigned int) * CHAR_BIT + 1] = {0};
        // Получаем указатель на предпоследний элемент массива
        // В последнем элементе должен быть 0, чтобы была правильная строка
        char *p = &buf[sizeof(unsigned int) * CHAR_BIT - 1];
        while (n > 0)
        {
            // Записываем в ячейку, на которую указывает p, символ
            // Добавляем '0', чтобы получился символ соответствующей цифры
            // Когда будете писать для сс с цифрами в виде букв,
            // нужно будет получать символ как-то иначе
            *p = n % k + '0';
            // Сдвигаем указатель на одну ячейку влево
            p--;
            n = (int)n / k;
        }
        // Выводим строку, начиная с первой цифры числа
        printf("%s\n", p + 1);
    }

}
→ Ссылка