Рубрики

Преобразовать двоичную дробь в десятичную

Учитывая строку двоичного числа п. Преобразуйте двоичный дробный n в его десятичный эквивалент.

Exanples:

Input: n = 110.101
Output: 6.625

Input: n = 101.1101
Output: 5.8125

Мы настоятельно рекомендуем вам нажать здесь и попрактиковаться, прежде чем переходить к решению.

Ниже приведены шаги преобразования двоичного дробного числа в десятичное.

А) Преобразовать неотъемлемую часть двоичного в десятичный эквивалент

  1. Умножьте каждую цифру отдельно от левой стороны радиуса до первой цифры на 2 0 , 2 1 , 2 2 ,… соответственно.
  2. Добавьте все результаты, полученные на шаге 1.
  3. Эквивалентное целое десятичное число будет результатом, полученным на шаге 2.

Б) Преобразовать дробную часть двоичного в десятичный эквивалент

  1. Разделите каждую цифру от правой стороны радиуса до конца на 2 1 , 2 2 , 2 3 ,… соответственно.
  2. Добавьте все результаты, полученные на шаге 1.
  3. Эквивалентное дробное десятичное число будет результатом, полученным на шаге 2.

C) Добавить целую и дробную часть десятичного числа.

иллюстрация

Let's take an example for n = 110.101

Step 1: Conversion of 110 to decimal
=> 1102 = (1*22) + (1*21) + (0*20)
=> 1102 = 4 + 2 + 0
=> 1102 = 6


Step 2: Conversion of .0101 to decimal
=> 0.1012 = (1*1/2) + (0*1/22) + (1*1/23)
=> 0.1012 = 1*0.5 + 0*0.25 + 1*0.125
=> 0.1012 = 0.625


Step 3: Add result of step 1 and 2.
=> 6 + 0.625 = 6.625

C ++

// C ++ программа для демонстрации вышеуказанных шагов
// двоичное дробное в десятичное преобразование
#include<bits/stdc++.h>

using namespace std;

  
// Функция для преобразования двоичного дробного в
// десятичная дробь

double binaryToDecimal(string binary, int len)

{

    // Извлекаем основную точку

    size_t point = binary.find('.');

  

    // Обновление точки, если не найдено

    if (point == string::npos)

        point = len;

  

    double intDecimal = 0, fracDecimal = 0, twos = 1;

  

    // Преобразовать неотъемлемую часть двоичной системы в десятичную

    // эквивалент

    for (int i = point-1; i>=0; --i)

    {

        // Вычитаем 0 для преобразования символа

        // в целое число

        intDecimal += (binary[i] - '0') * twos;

        twos *= 2;

    }

  

    // Преобразовать дробную часть двоичного в

    // десятичный эквивалент

    twos = 2;

    for (int i = point+1; i < len; ++i)

    {

        fracDecimal += (binary[i] - '0') / twos;

        twos *= 2.0;

    }

  

    // Добавить как целую, так и дробную часть

    return intDecimal + fracDecimal;

}

  
// Код драйвера

int main()

{

    string n = "110.101";

    cout << binaryToDecimal(n, n.length()) << "\n";

  

    n = "101.1101";

    cout << binaryToDecimal(n, n.length());

  

    return 0;

}

python3

# Python3 программа для демонстрации вышеуказанных шагов
# двоичного дробного в десятичное преобразование

  
# Функция для преобразования двоичного дробного
# до десятичного

def binaryToDecimal(binary, length) :

      

    # Извлечь основную точку

    point = binary.find('.')

  

    # Точка обновления, если не найдена

    if (point == -1) :

        point = length 

  

    intDecimal = 0

    fracDecimal = 0

    twos = 1

  

    # Преобразовать неотъемлемую часть двоичного

    # в десятичном эквиваленте

    for i in range(point-1, -1, -1) : 

          

        # Вычтите 0 для преобразования

        # символ в целое число

        intDecimal += ((ord(binary[i]) - 

                        ord('0')) * twos) 

        twos *= 2

  

    # Преобразовать дробную часть двоичного

    # в десятичном эквиваленте

    twos = 2

      

    for i in range(point + 1, length):

          

        fracDecimal += ((ord(binary[i]) -

                         ord('0')) / twos); 

        twos *= 2.0

  

    # Добавить как целую, так и дробную часть

    ans = intDecimal + fracDecimal

      

    return ans

  
# Код драйвера:

if __name__ == "__main__" :

    n = "110.101"

    print(binaryToDecimal(n, len(n)))

      

    n = "101.1101"

    print(binaryToDecimal(n, len(n)))

  
# Этот код добавлен
# от aishwarya.27

Output:
6.625
5.8125

Временная сложность: O (len (n))
Вспомогательное пространство: O (len (n))

Где len — общее количество цифр, содержащихся в двоичном числе n.

Смотрите это: Преобразование десятичной дроби в двоичное число.

Эта статья предоставлена Shubham Bansal . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Рекомендуемые посты:

Преобразовать двоичную дробь в десятичную

0.00 (0%) 0 votes