Перевести целое число из одной системы счисления в другую, используя рекурсию - C (СИ)
Формулировка задачи:
#include <stdio.h>
int main(void)
{
int dec;
int v;
scanf_s("%d", &dec);
v = 128;
for (int i = 1; i <= 8; i++)
{
if (dec >= v)
{
printf("1");
dec -= v;
}
else
printf("0");
v /= 2;
}
puts("\n\n");
return 0;
}Решение задачи: «Перевести целое число из одной системы счисления в другую, используя рекурсию»
char * uint2bin(unsigned n, char * buf) {
char * tail = ( n > 1 ) ? uint2bin(n >> 1, buf) : buf; // <<
sprintf(tail, "%d", n & 1);
return tail + 1;
}
Объяснение кода листинга программы
В данном коде представлена функция uint2bin, которая принимает два аргумента: целое число n и указатель на буфер buf. Функция переворачивает число n из десятичной системы счисления в двоичную систему счисления и записывает результат в буфер buf.
Внутри функции используется рекурсия для деления числа n на 2. Если число больше 1, то функция вызывает саму себя с аргументами n >> 1 (что означает деление n на 2) и buf. Если число равно 1, то функция просто возвращает буфер buf.
Далее функция использует функцию sprintf для записи в буфер tail остатка от деления n на 2 в десятичной системе счисления.
В конце функция возвращает указатель на следующую позицию в буфере, увеличенную на 1, чтобы вызов функции мог продолжить запись следующего разряда числа.