Написать рекурсивную функцию перевода натурального числа из 10 в 16 системы счисления - C (СИ)
Формулировка задачи:
Написать рекурсивную функцию перевода натурального числа из десятичной системы счисления в 16-ричную.
Решение задачи: «Написать рекурсивную функцию перевода натурального числа из 10 в 16 системы счисления»
textual
Листинг программы
#include <stdio.h>
void hexprint(unsigned n) {
if ( n ) {
hexprint(n >> 4);
printf("%c", "0123456789abcdef"[n & 0xf]);
}
}
int main(void) {
unsigned n;
while ( printf("Num: ") && scanf("%u", &n) == 1 && printf("Hex: ") ) {
if ( ! n )
printf("0\n");
else {
hexprint(n);
printf("\n");
}
}
}
Объяснение кода листинга программы
В этом коде написана функция hexprint, которая рекурсивно выводит натуральное число в шестнадцатеричной системе счисления.
Алгоритм работы функции hexprint следующий:
- Если число больше или равно 16, то функция вызывает саму себя, передавая в качестве аргумента число, полученное путем сдвига числа на 4 бита вправо (для первого вызова сдвиг будет на 0 битов).
- После этого функция выводит в шестнадцатеричной системе счисления единицу или ноль в зависимости от значения последнего бита числа.
- Если число меньше 16, то функция просто выводит его.
В функции
mainпользователю предлагается ввести натуральное число, которое затем преобразуется в шестнадцатеричную систему счисления с помощью функцииhexprint. После этого пользователю предлагается ввести еще одно число и т.д. Полный список действий: - Ввод числа с клавиатуры.
- Преобразование числа в шестнадцатеричную систему счисления с помощью функции
hexprint. - Вывод результата в консоль.
- Предложение пользователю ввести еще одно число и повторить процесс.