Перевод числа из двоичной в десятичную с.с. - C (СИ)

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

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

Дана задача:

Задано неотрицательное целое число в двоичной системе счисления. Требуется перевести его в десятичную. Ввод В первой строке содержится исходное число не более чем из 50 000 цифр 0 и 1 без ведущих нулей. Вывод Вывод должен содержать это число в десятичной системе счисления без ведущих нулей. На этом же форуме нашёл код, который удовлетворяет решению данной задачи:
#include <stdio.h>
#include <conio.h>
int main () {
    char c;
    int result=0;
    while(scanf("%c",&c) ) {
        if( (c<'0') || (c > '1') ) break;
        result<<=1;
        result+=c-'0';
    };
    printf("\n%d",result);
    return 0;
}
Преподаватель сказал, что условие не совсем верное, т.к. если в файле с исходными данными есть перевод строки после данных - все работает нормально. а если нет - то программа уйдет в бесконечный цикл. Помогите пожалуйста исправить эту проблему, неделю голову ломаю.

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

textual
Листинг программы
#include <stdio.h>
int main () {
    char c;
    unsigned __int64 result=0;
    while(scanf("%c",&c) == 1)  {
        if( (c<'0') || (c > '1') ) break;
        result<<=1;
        result+=c-'0';
    };
    printf("%I64u\n",result);
    return 0;
}

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

  1. Подключение стандартной библиотеки для работы с файлами и вывода данных
  2. Объявление функции main, которая является точкой входа в программу
  3. Объявление переменной типа char c, которая будет использоваться для считывания символов с клавиатуры
  4. Объявление переменной типа unsigned __int64 result, которая будет использоваться для хранения результата перевода числа из двоичной системы счисления в десятичную
  5. Организация цикла while, который будет выполняться до тех пор, пока пользователь не введет символ, не являющийся цифрой от 0 до 1
  6. Внутри цикла сдвиг результата вправо на 1 позицию с помощью оператора <<=
  7. Добавление к результату значения введенного символа, предварительно вычтя из него код символа '0'
  8. Выполнение условия для выхода из цикла while при вводе символа, не являющегося цифрой от 0 до 1
  9. Вывод результата на экран с помощью функции printf, используя форматный спецификатор %I64u для вывода значения типа unsigned __int64
  10. Возврат 0 из функции main, что означает успешное выполнение программы

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


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

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

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