Си, вывод чисел наоборот
Пишу программу для перевода из десятичной системы счисления в любую другую, пока без перевода чисел в буквы.
Вопрос: Как мне вывести мой остаток от деления наоборот? Сейчас он выводится так:
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);
}
}