Перевести двоичное число в десятичное - 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-значных чисел и ниже. Т.е., вот пример для пятизначных.
#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;
}
А каким образом можно её написать так, чтобы не ограничивать себя в выборе чисел? (вариант вручную добавлять tшки - не предлагать )

Решение задачи: «Перевести двоичное число в десятичное»

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;
}

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

  1. Включаем заголовочный файл для использования функций ввода-вывода
  2. Функция as_binary_string принимает два аргумента: целое число n и указатель на строку buf
  3. Внутри функции создаем указатель p на переменную buf
  4. Запускаем цикл while, который выполняется до тех пор, пока n больше нуля
  5. Внутри цикла вычисляем остаток от деления n на 2 и преобразуем его в символ, добавляя к нему символ '0' и записывая результат в переменную p
  6. Увеличиваем значение p на 1 для перехода к следующему символу в строке buf
  7. Делим n на 2
  8. Цикл продолжается до тех пор, пока n больше нуля
  9. В конце цикла устанавливаем символ '\0' в конец строки buf
  10. Возвращаем значение buf
  11. В функции main создаем переменную dec со значением 17
  12. Создаем массив символов bin с 33 элементами, все элементы инициализируются нулями
  13. Вызываем функцию printf для вывода значения dec и результата функции as_binary_string в формате строки
  14. Возвращаем 0, чтобы указать, что программа успешно завершилась

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


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

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

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