logo

Zamień ułamek dziesiętny na liczbę binarną

Biorąc pod uwagę ułamek dziesiętny n i liczbę całkowitą k, przekonwertuj liczbę dziesiętną n na równoważną liczbę binarną z dokładnością do k po przecinku.

Przykłady:



Input: n = 2.47, k = 5 Output: 10.01111 Input: n = 6.986 k = 8 Output: 110.11111100>
Zdecydowanie zalecamy kliknięcie tutaj i przećwiczenie, zanim przejdziesz do rozwiązania.

A) Zamień część całkowitą ułamka dziesiętnego na odpowiednik binarny

  1. Podziel liczbę dziesiętną przez 2 i zapisz resztę w tablicy.
  2. Podziel iloraz przez 2.
  3. Powtarzaj krok 2, aż otrzymamy iloraz równy zero.
  4. Równoważna liczba binarna byłaby odwrotnością wszystkich pozostałości z kroku 1.

B) Zamień część ułamkową liczby dziesiętnej na jej odpowiednik w formacie binarnym

  1. Pomnóż ułamkową liczbę dziesiętną przez 2.
  2. Integralną częścią wynikowej liczby dziesiętnej będzie pierwsza cyfra ułamkowej liczby binarnej.
  3. Powtórz krok 1, używając tylko części ułamkowej liczby dziesiętnej, a następnie krok 2.

C) Połącz część całkowitą i ułamkową liczby binarnej.



Ilustracja :

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 So equivalent binary of integral part of decimal is 100. 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 So equivalent binary of fractional part of decimal is .011 Step 3: Combined the result of step 1 and 2. Final answer can be written as: 100 + .011 = 100.011>

Program demonstrujący powyższe kroki:

C++






// C++ program to convert fractional decimal> // to binary number> #include> using> namespace> std;> > // Function to convert decimal to binary upto> // k-precision after decimal point> string decimalToBinary(>double> num,>int> k_prec)> {> >string binary =>''>;> > >// Fetch the integral part of decimal number> >int> Integral = num;> > >// Fetch the fractional part decimal number> >double> fractional = num - Integral;> > >// Conversion of integral part to> >// binary equivalent> >while> (Integral)> >{> >int> rem = Integral % 2;> > >// Append 0 in binary> >binary.push_back(rem +>'0'>);> > >Integral /= 2;> >}> > >// Reverse string to get original binary> >// equivalent> >reverse(binary.begin(),binary.end());> > >// Append point before conversion of> >// fractional part> >binary.push_back(>'.'>);> > >// Conversion of fractional part to> >// binary equivalent> >while> (k_prec--)> >{> >// Find next bit in fraction> >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;> }> > // Driver code> int> main()> {> > >double> n = 4.47;> >int> k = 3;> >cout << decimalToBinary(n, k) <<>' '>;> > >n = 6.986 , k = 5;> >cout << decimalToBinary(n, k);> >return> 0;> }>

>

>

Jawa




// Java program to convert fractional decimal> // to binary number> import> java.util.*;> > class> GFG> {> > >// Function to convert decimal to binary upto> >// k-precision after decimal point> >static> String decimalToBinary(>double> num,>int> k_prec)> >{> >String binary =>''>;> > >// Fetch the integral part of decimal number> >int> Integral = (>int>) num;> > >// Fetch the fractional part decimal number> >double> fractional = num - Integral;> > >// Conversion of integral part to> >// binary equivalent> >while> (Integral>>0>)> >{> >int> rem = Integral %>2>;> > >// Append 0 in binary> >binary += ((>char>)(rem +>'0'>));> > >Integral /=>2>;> >}> > >// Reverse string to get original binary> >// equivalent> >binary = reverse(binary);> > >// Append point before conversion of> >// fractional part> >binary += (>'.'>);> > >// Conversion of fractional part to> >// binary equivalent> >while> (k_prec-->>0>)> >{> >// Find next bit in fraction> >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 { // Swap values of left and right char temp = temparray[left]; temparray[left] = temparray[right]; temparray[right] = temp; } return String.valueOf(temparray); } // Driver code 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)); } } // This code contributed by Rajput-Ji>

>

>

Python3




# Python3 program to convert fractional> # decimal to binary number> > # Function to convert decimal to binary> # upto k-precision after decimal point> def> decimalToBinary(num, k_prec) :> > >binary>=> ''> > ># Fetch the integral part of> ># decimal number> >Integral>=> int>(num)> > ># Fetch the fractional part> ># decimal number> >fractional>=> num>-> Integral> > ># Conversion of integral part to> ># binary equivalent> >while> (Integral) :> > >rem>=> Integral>%> 2> > ># Append 0 in binary> >binary>+>=> str>(rem);> > >Integral>/>/>=> 2> > ># Reverse string to get original> ># binary equivalent> >binary>=> binary[ : :>->1>]> > ># Append point before conversion> ># of fractional part> >binary>+>=> '.'> > ># Conversion of fractional part> ># to binary equivalent> >while> (k_prec) :> > ># Find next bit in fraction> >fractional>*>=> 2> >fract_bit>=> int>(fractional)> > >if> (fract_bit>=>=> 1>) :> > >fractional>->=> fract_bit> >binary>+>=> '1'> > >else> :> >binary>+>=> '0'> > >k_prec>->=> 1> > >return> binary> > # Driver code> if> __name__>=>=> '__main__'> :> > >n>=> 4.47> >k>=> 3> >print>(decimalToBinary(n, k))> > >n>=> 6.986> >k>=> 5> >print>(decimalToBinary(n, k))> > # This code is contributed by Ryuga>

>

>

C#




// C# program to convert fractional decimal> // to binary number> using> System;> > class> GFG> {> > >// Function to convert decimal to binary upto> >// k-precision after decimal point> >static> String decimalToBinary(>double> num,>int> k_prec)> >{> >String binary =>''>;> > >// Fetch the integral part of decimal number> >int> Integral = (>int>) num;> > >// Fetch the fractional part decimal number> >double> fractional = num - Integral;> > >// Conversion of integral part to> >// binary equivalent> >while> (Integral>0)> >{> >int> rem = Integral % 2;> > >// Append 0 in binary> >binary += ((>char>)(rem +>'0'>));> > >Integral /= 2;> >}> > >// Reverse string to get original binary> >// equivalent> >binary = reverse(binary);> > >// Append point before conversion of> >// fractional part> >binary += (>'.'>);> > >// Conversion of fractional part to> >// binary equivalent> >while> (k_prec-->0)> >{> >// Find next bit in fraction> >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 { // Swap values of left and right char temp = temparray[left]; temparray[left] = temparray[right]; temparray[right] = temp; } return String.Join('',temparray); } // Driver code 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)); } } // This code has been contributed by 29AjayKumar>

>

jak zainicjować tablicę w Javie
>

PHP




// PHP program to convert fractional decimal // to binary number // Function to convert decimal to binary upto // k-precision after decimal point function decimalToBinary($num, $k_prec) { $binary = ''; // Fetch the integral part of decimal number $Integral = (int)($num); // Fetch the fractional part decimal number $fractional = $num - $Integral; // Conversion of integral part to // binary equivalent while ($Integral) { $rem = $Integral % 2; // Append 0 in binary $binary.=chr($rem + 48 ); $Integral = (int)($Integral/2); } // Reverse string to get original binary // equivalent $binary=strrev($binary); // Append point before conversion of // fractional part $binary.='.'; // Conversion of fractional part to // binary equivalent while ($k_prec--) { // Find next bit in fraction $fractional *= 2; $fract_bit = (int)$fractional; if ($fract_bit == 1) { $fractional -= $fract_bit; $binary.=chr(1 + 48 ); } else $binary.=chr(0 + 48 ); } return $binary; } // Driver code $n = 4.47; $k = 3; echo decimalToBinary($n, $k).' '; $n = 6.986; $k = 5; echo decimalToBinary($n, $k); // This code is contributed by mits ?>>

>

>

JavaScript




> > >// JavaScript program to convert fractional> >// decimal to binary number> > >// Function to convert decimal to binary upto> >// k-precision after decimal point> >function> decimalToBinary(num, k_prec)> >{> >let binary =>''>;> > >// Fetch the integral part of decimal number> >let Integral = parseInt(num, 10);> > >// Fetch the fractional part decimal number> >let fractional = num - Integral;> > >// Conversion of integral part to> >// binary equivalent> >while> (Integral>0)> >{> >let rem = Integral % 2;> > >// Append 0 in binary> >binary +=> >(String.fromCharCode(rem +>'0'>.charCodeAt()));> > >Integral = parseInt(Integral / 2, 10);> >}> > >// Reverse string to get original binary> >// equivalent> >binary = reverse(binary);> > >// Append point before conversion of> >// fractional part> >binary += (>'.'>);> > >// Conversion of fractional part to> >// binary equivalent> >while> (k_prec-->0)> >{> >// Find next bit in fraction> >fractional *= 2;> >let fract_bit = parseInt(fractional, 10);> > >if> (fract_bit == 1)> >{> >fractional -= fract_bit;> >binary +=> >String.fromCharCode(1 +>'0'>.charCodeAt());> >}> >else> >{> >binary +=> >String.fromCharCode(0 +>'0'>.charCodeAt());> >}> >}> > >return> binary;> >}> > >function> reverse(input)> >{> >let temparray = input.split(>''>);> >let left, right = 0;> >right = temparray.length - 1;> > >for> (left = 0; left { // Swap values of left and right let temp = temparray[left]; temparray[left] = temparray[right]; temparray[right] = temp; } return temparray.join(''); } let n = 4.47; let k = 3; document.write(decimalToBinary(n, k) + ''); n = 6.986; k = 5; document.write(decimalToBinary(n, k));>

>

>

Wyjście

100.011 110.11111>

Złożoność czasowa: O(len(n))
Przestrzeń pomocnicza: O(len(n))

gdzie len() to całkowita liczba cyfr zawartych w liczbie n.
Konwertuj ułamek binarny na dziesiętny