Заменить шестнадцатеричную цифру на количество единиц, имеющихся в ее двоичном представлении - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дано короткое целое неотрицательное число. Заменить каждую входящую в его состав шестнадцатеричную цифру на количество единиц, имеющихся в ее двоичном представлении (например, цифру F надо заменить на 4).

Решение задачи: «Заменить шестнадцатеричную цифру на количество единиц, имеющихся в ее двоичном представлении»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
int main()
{
    const char *s = "4f5"; // задаём само число
    int k, i, p = 0;
    sscanf(s, "%x", &k);  // переводим из 16-й строки в 16-е число
    for(i = strlen(s)*4; i > 0; i--)
    {
        if(k & (1 << (i - 1)))
            p++;
        if((i - 1)%4 == 0)           // 16-я цифра имеет размер 4 бита, поэтому я прохожу 4 бита, потом беру следующие
        {
            printf("%d", p);    //печатаем кол-во едениц
            p = 0;
        }
    }
    puts("");
    return 0;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы с I/O и строками
  2. Задаём само число в виде строки s = 4f5
  3. Объявляем переменные: k — для хранения шестнадцатеричного числа, i — счётчик циклов, p — счётчик единиц
  4. С помощью функции sscanf переводим строку в шестнадцатеричное число и сохраняем его в переменной k
  5. В цикле for перебираем биты числа, начиная с самого старшего (от большего к меньшему), используя размерность 4 бита для каждой цифры в числе
  6. Проверяем, есть ли единицы в текущем бите (k & (1 << (i — 1))) и если есть, увеличиваем счётчик p на 1
  7. При каждой итерации, когда проходит 4 бита (16-я цифра имеет размер 4 бита), выводим количество найденных единиц (p) и сбрасываем счётчик p в 0
  8. После завершения цикла выводим результат на экран с помощью функции puts
  9. Завершаем программу и возвращаем 0, чтобы указать, что программа успешно завершилась

ИИ поможет Вам:


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

Оцени полезность:

5   голосов , оценка 5 из 5
Похожие ответы