Перевести двоичное число в десятичное - 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-значных чисел и ниже. Т.е., вот пример для пятизначных.
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. int main ()
  4. {
  5. int z, c, t1, t2, t3, t4, t5;
  6. printf ("Vvedite dvoicnoe chislo:\n");
  7. scanf("%d", &z);
  8. t1=(z/10000);
  9. t2=((z%10000)/1000);
  10. t3=(((z%10000)%1000)/100);
  11. t4=((((z%10000)%1000)%100)/10);
  12. t5=((((z%10000)%1000)%100)%10)/1;
  13. 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) )
  14. {
  15. printf ("Vvedeno ne dvoicnoe chislo\n");
  16. }
  17. else
  18. { c= t1*16+t2*8+t3*4+t4*2+t5*1;
  19. printf("Desyatichnoe chislo %d", c);
  20. }
  21.  
  22. getch();
  23. return 0;
  24. }
А каким образом можно её написать так, чтобы не ограничивать себя в выборе чисел? (вариант вручную добавлять tшки - не предлагать )

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

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. char *as_binary_string(int n, char *buf) {
  4.    char *p = buf;
  5.    
  6.    while (n) {
  7.       *p++ = (n % 2) + '0';
  8.       n /= 2;
  9.    }
  10.    
  11.    *p = '\0';
  12.    return buf;
  13. }
  14.  
  15. int main() {
  16.    int dec = 17;
  17.    char bin[33] = { 0 };
  18.    
  19.    printf("%d = %sn", dec, as_binary_string(dec, bin));
  20.    return 0;
  21. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы