Перевести двоичное число заданное в виде строки в десятичное - C (СИ)
Формулировка задачи:
Перевести двойчное число в десятичное, число задается строкой, функция должна возвращать десятичное число.
Решение задачи: «Перевести двоичное число заданное в виде строки в десятичное»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <limits.h> #include <ctype.h> unsigned bin2num(const char * bs) { return ( *bs ) ? ( (*bs - '0') << (strlen(bs) - 1) ) | bin2num(bs + 1) : 0; } #define INT_BIT ( CHAR_BIT * sizeof(int) ) typedef char binstr_t[INT_BIT + 1]; char * get_bin(binstr_t bs) { int pos = 0, ch; while ( pos < INT_BIT && (ch = getchar()) != EOF && (ch == '0' || ch == '1') ) bs[pos++] = ch; bs[pos] = '\0'; return ( ch == '\0' || isspace(ch) ) ? bs : NULL; } int main(void) { binstr_t bs; while ( printf("Binary: ") && get_bin(bs) ) printf("Dec: %u\n", bin2num(bs)); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с строками, числами и символами.
- Определяем функцию bin2num, которая принимает строку в двоичной системе счисления и возвращает десятичное число. Рекурсивный вызов функции bin2num осуществляется до тех пор, пока не будет получен конечный результат.
- Объявляем макрос INT_BIT, который вычисляет количество бит в типе данных int, используемого в программе.
- Определяем тип данных binstr_t, который представляет собой строку, предназначенную для хранения двоичного числа.
- В функции get_bin осуществляется считывание двоичной строки из стандартного ввода. Используется цикл while, который выполняется до тех пор, пока не будет достигнута конечная часть строки (после ввода 0 или 1). Считанный символ добавляется в строку bs.
- В функции main осуществляется считывание двоичной строки и перевод ее в десятичное число с помощью функции bin2num. Цикл while считывает строку до тех пор, пока не будет введен символ новой строки.
- Возвращаемое значение функции bin2num выводится на экран с помощью функции printf.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д