Рубрики

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

Дано десятичное число n дроби и целое число k, преобразуйте десятичное число n в эквивалентное двоичное число с точностью до k после десятичной точки.
Примеры:

Input: n = 2.47, k = 5
Output: 10.01111

Input: n = 6.986 k = 8
Output: 110.11111100

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

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

  1. Разделите десятичное число на 2 и сохраните остатки в массиве.
  2. Разделите частное на 2.
  3. Повторите шаг 2, пока мы не получим частное, равное нулю.
  4. Эквивалентное двоичное число будет обратным ко всем остаткам шага 1.

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

  1. Умножьте дробное десятичное число на 2.
  2. Неотъемлемой частью результирующего десятичного числа будет первая цифра двоичного числа дроби.
  3. Повторите шаг 1, используя только дробную часть десятичного числа, а затем шаг 2.

В) Объединить как целую, так и дробную часть двоичного числа.

иллюстрация

Let's take an example for n = 4.47 k = 3

Step 1: Conversion of 4 to binary
1. 4/2 : Remainder = 0 : Quotient = 2
2. 2/2 : Remainder = 0 : Quotient = 1
3. 1/2 : Remainder = 1 : Quotient = 0



Step 2: Conversion of .47 to binary
1. 0.47 * 2 = 0.94, Integral part: 0
2. 0.94 * 2 = 1.88, Integral part: 1
3. 0.88 * 2 = 1.76, Integral part: 1



Step 3: Combined the result of step 1 and 2.

Final answer can be written as:
100 + .011 = 100.011

Программа для демонстрации вышеуказанных шагов:

C ++

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

using namespace std;

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

string decimalToBinary(double num, int k_prec)

{

    string binary = "";

  

    // Получить целую часть десятичного числа

    int Integral = num;

  

    // Извлекаем десятичное число дробной части

    double fractional = num - Integral;

  

    // Преобразование составной части в

    // бинарный эквивалент

    while (Integral)

    {

        int rem = Integral % 2;

  

        // Добавить 0 в двоичном виде

        binary.push_back(rem +'0');

  

        Integral /= 2;

    }

  

    // Обратная строка для получения исходного двоичного файла

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

    reverse(binary.begin(),binary.end());

  

    // Добавить точку перед преобразованием

    // дробная часть

    binary.push_back('.');

  

    // Преобразование дробной части в

    // бинарный эквивалент

    while (k_prec--)

    {

        // Найти следующий бит в дроби

        fractional *= 2;

        int fract_bit = fractional;

  

        if (fract_bit == 1)

        {

            fractional -= fract_bit;

            binary.push_back(1 + '0');

        }

        else

            binary.push_back(0 + '0');

    }

  

    return binary;

}

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

int main()

{

  

    double n = 4.47;

    int k = 3;

    cout << decimalToBinary(n, k) << "\n";

  

    n = 6.986 , k = 5;

    cout << decimalToBinary(n, k);

    return 0;

}

Джава

// Java-программа для преобразования дробного десятичного числа
// в двоичное число

import java.util.*;

  

class GFG 

{

  

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

    // k-точность после десятичной точки

    static String decimalToBinary(double num, int k_prec)

    {

        String binary = "";

  

        // Получить целую часть десятичного числа

        int Integral = (int) num;

  

        // Извлекаем десятичное число дробной части

        double fractional = num - Integral;

  

        // Преобразование составной части в

        // бинарный эквивалент

        while (Integral > 0

        {

            int rem = Integral % 2;

  

            // Добавить 0 в двоичном виде

            binary += ((char)(rem + '0'));

  

            Integral /= 2;

        }

  

        // Обратная строка для получения исходного двоичного файла

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

        binary = reverse(binary);

  

        // Добавить точку перед преобразованием

        // дробная часть

        binary += ('.');

  

        // Преобразование дробной части в

        // бинарный эквивалент

        while (k_prec-- > 0)

        {

            // Найти следующий бит в дроби

            fractional *= 2;

            int fract_bit = (int) fractional;

  

            if (fract_bit == 1)

            {

                fractional -= fract_bit;

                binary += (char)(1 + '0');

            }

            else

            {

                binary += (char)(0 + '0');

            }

        }

  

        return binary;

    }

  

    static String reverse(String input) 

    {

        char[] temparray = input.toCharArray();

        int left, right = 0;

        right = temparray.length - 1;

  

        for (left = 0; left < right; left++, right--) 

        {

            // Меняем значения слева и справа

            char temp = temparray[left];

            temparray[left] = temparray[right];

            temparray[right] = temp;

        }

        return String.valueOf(temparray);

    }

  

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

    public static void main(String[] args) 

    {

        double n = 4.47;

        int k = 3;

        System.out.println(decimalToBinary(n, k));

  

        n = 6.986;

        k = 5;

        System.out.println(decimalToBinary(n, k));

    }

}

  
// Этот код предоставлен Rajput-Ji

python3

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

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

def decimalToBinary(num, k_prec) :

  

    binary = "" 

  

    # Получить неотъемлемую часть

    # десятичное число

    Integral = int(num) 

  

    # Получить дробную часть

    # десятичное число

    fractional = num - Integral

  

    # Преобразование составной части в

    # бинарный эквивалент

    while (Integral) :

          

        rem = Integral % 2

  

        # Добавить 0 в двоичном виде

        binary += str(rem); 

  

        Integral //= 2

      

    # Обратная строка, чтобы получить оригинал

    # бинарный эквивалент

    binary = binary[ : : -1

  

    # Добавить точку перед преобразованием

    № дробной части

    binary += '.'

  

    # Преобразование дробной части

    # в двоичный эквивалент

    while (k_prec) :

          

        # Найти следующий бит в дроби

        fractional *= 2

        fract_bit = int(fractional) 

  

        if (fract_bit == 1) :

              

            fractional -= fract_bit 

            binary += '1'

              

        else :

            binary += '0'

  

        k_prec -= 1

  

    return binary 

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

if __name__ == "__main__" :

      

    n = 4.47

    k = 3

    print(decimalToBinary(n, k))

  

    n = 6.986

    k = 5

    print(decimalToBinary(n, k))

  
# Этот код предоставлен Ryuga

C #

// C # программа для преобразования дробного десятичного числа
// в двоичное число

using System;

  

class GFG 

{

   

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

    // k-точность после десятичной точки

    static String decimalToBinary(double num, int k_prec)

    {

        String binary = "";

   

        // Получить целую часть десятичного числа

        int Integral = (int) num;

   

        // Извлекаем десятичное число дробной части

        double fractional = num - Integral;

   

        // Преобразование составной части в

        // бинарный эквивалент

        while (Integral > 0) 

        {

            int rem = Integral % 2;

   

            // Добавить 0 в двоичном виде

            binary += ((char)(rem + '0'));

   

            Integral /= 2;

        }

   

        // Обратная строка для получения исходного двоичного файла

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

        binary = reverse(binary);

   

        // Добавить точку перед преобразованием

        // дробная часть

        binary += ('.');

   

        // Преобразование дробной части в

        // бинарный эквивалент

        while (k_prec-- > 0)

        {

            // Найти следующий бит в дроби

            fractional *= 2;

            int fract_bit = (int) fractional;

   

            if (fract_bit == 1)

            {

                fractional -= fract_bit;

                binary += (char)(1 + '0');

            }

            else

            {

                binary += (char)(0 + '0');

            }

        }

   

        return binary;

    }

   

    static String reverse(String input) 

    {

        char[] temparray = input.ToCharArray();

        int left, right = 0;

        right = temparray.Length - 1;

   

        for (left = 0; left < right; left++, right--) 

        {

            // Меняем значения слева и справа

            char temp = temparray[left];

            temparray[left] = temparray[right];

            temparray[right] = temp;

        }

        return String.Join("",temparray);

    }

   

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

    public static void Main(String[] args) 

    {

        double n = 4.47;

        int k = 3;

        Console.WriteLine(decimalToBinary(n, k));

   

        n = 6.986;

        k = 5;

        Console.WriteLine(decimalToBinary(n, k));

    }

}

  
// Этот код предоставлен 29AjayKumar

PHP

<?php
// PHP программа для преобразования дробного десятичного числа
// в двоичное число

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

function decimalToBinary($num, $k_prec)

{

    $binary = "";

  

    // Получить целую часть десятичного числа

    $Integral = (int)($num);

  

    // Извлекаем десятичное число дробной части

    $fractional = $num - $Integral;

  

    // Преобразование составной части в

    // бинарный эквивалент

    while ($Integral)

    {

        $rem = $Integral % 2;

  

        // Добавить 0 в двоичном виде

        $binary.=chr($rem + 48 );

  

        $Integral = (int)($Integral/2);

    }

  

    // Обратная строка для получения исходного двоичного файла

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

    $binary=strrev($binary);

  

    // Добавить точку перед преобразованием

    // дробная часть

    $binary.='.';

  

    // Преобразование дробной части в

    // бинарный эквивалент

    while ($k_prec--)

    {

        // Найти следующий бит в дроби

        $fractional *= 2;

        $fract_bit = (int)$fractional;

  

        if ($fract_bit == 1)

        {

            $fractional -= $fract_bit;

            $binary.=chr(1 + 48 );

        }

        else

            $binary.=chr(0 + 48 );

    }

  

    return $binary;

}

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

  

    $n = 4.47;

    $k = 3;

    echo decimalToBinary($n, $k)."\n";

  

    $n = 6.986;

    $k = 5;

    echo decimalToBinary($n, $k);

      
// Этот код предоставлен mits
?>

Выход:

100.011
110.11111

Временная сложность: O (len (n))
Вспомогательное пространство: O (len (n))
где len () — общее количество цифр в числе n.

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

Ссылка:
http://cs.furman.edu/digitaldomain/more/ch6/dec_frac_to_bin.htm
http://www.cquestions.com/2011/07/c-program-for-fractional-decimal-to.html

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

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

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

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

0.00 (0%) 0 votes