Перевести двоичное число в десятичное - C (СИ)
Формулировка задачи:
Введите целое число, содержащее только 0 и 1 (т.е. "двоичное" целое число) и выведите его десятичный эквивалент. (Подсказка: примените операции деления и взятия по модулю для отделения справа налево одного за другим разрядов "двоичного" числа. Подобно тому, как в десятичной системе счисления цифра самого правого разряда имеет позиционное значение 1, следующая из оставшихся цифр имеет позиционное значение 10, потом 100, потом 1000 и т.д., в системе двоичного счисления цифра самого правого разряда имеет позиционное значение 1, следующая из оставшихся цифр имеет позиционное значение 2, потом 4, потом 8 и т.д. Таким образом, десятичное число 234 может быть интерпретировано как 4*1+3*10+2*100. Десятичным эквивалентом двоичного 1101 является 1*1+0*2+1*4+1*8 или 1+0+4+8 или 13.)
Ребят, такой вопрос. Я понял только как написать программу для n-значных чисел и ниже. Т.е., вот пример для пятизначных.
А каким образом можно её написать так, чтобы не ограничивать себя в выборе чисел? (вариант вручную добавлять tшки - не предлагать )
#include <stdio.h> #include <conio.h> int main () { int z, c, t1, t2, t3, t4, t5; printf ("Vvedite dvoicnoe chislo:\n"); scanf("%d", &z); t1=(z/10000); t2=((z%10000)/1000); t3=(((z%10000)%1000)/100); t4=((((z%10000)%1000)%100)/10); t5=((((z%10000)%1000)%100)%10)/1; if ( (t1==9)||(t1==2)||(t1==3)||(t1==4)||(t1==5)||(t1==6)||(t1==7)||(t1==8) || (t2==9)||(t2==2)||(t2==3)||(t2==4)||(t2==5)||(t2==6)||(t2==7)||(t2==8) || (t3==9)||(t3==2)||(t3==3)||(t3==4)||(t3==5)||(t3==6)||(t3==7)||(t3==8) || (t4==9)||(t4==2)||(t4==3)||(t4==4)||(t4==5)||(t4==6)||(t4==7)||(t4==8) || (t5==9)||(t5==2)||(t5==3)||(t5==4)||(t5==5)||(t5==6)||(t5==7)||(t5==8) ) { printf ("Vvedeno ne dvoicnoe chislo\n"); } else { c= t1*16+t2*8+t3*4+t4*2+t5*1; printf("Desyatichnoe chislo %d", c); } getch(); return 0; }
Решение задачи: «Перевести двоичное число в десятичное»
textual
Листинг программы
#include <stdio.h> char *as_binary_string(int n, char *buf) { char *p = buf; while (n) { *p++ = (n % 2) + '0'; n /= 2; } *p = '\0'; return buf; } int main() { int dec = 17; char bin[33] = { 0 }; printf("%d = %sn", dec, as_binary_string(dec, bin)); return 0; }
Объяснение кода листинга программы
- Включаем заголовочный файл
для использования функций ввода-вывода - Функция as_binary_string принимает два аргумента: целое число n и указатель на строку buf
- Внутри функции создаем указатель p на переменную buf
- Запускаем цикл while, который выполняется до тех пор, пока n больше нуля
- Внутри цикла вычисляем остаток от деления n на 2 и преобразуем его в символ, добавляя к нему символ '0' и записывая результат в переменную p
- Увеличиваем значение p на 1 для перехода к следующему символу в строке buf
- Делим n на 2
- Цикл продолжается до тех пор, пока n больше нуля
- В конце цикла устанавливаем символ '\0' в конец строки buf
- Возвращаем значение buf
- В функции main создаем переменную dec со значением 17
- Создаем массив символов bin с 33 элементами, все элементы инициализируются нулями
- Вызываем функцию printf для вывода значения dec и результата функции as_binary_string в формате строки
- Возвращаем 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д