Convertiți fracția zecimală în număr binar

Având în vedere o fracție numărul zecimal n și un întreg k, convertiți numărul zecimal n în număr binar echivalent până la k precizie după virgulă.

Exemple:

Input: n = 2.47, k = 5 Output: 10.01111 Input: n = 6.986 k = 8 Output: 110.11111100 
Vă recomandăm insistent să faceți clic aici și să îl exersați, înainte de a trece la soluție.

A) Convertiți partea integrală a zecimalului în echivalent binar

  1. Împărțiți numărul zecimal cu 2 și stocați resturile în matrice.
  2. Împărțiți câtul la 2.
  3. Repetați pasul 2 până obținem coeficientul egal cu zero.
  4. Numărul binar echivalent ar fi invers față de toate resturile pasului 1.

B) Convertiți partea fracționară a zecimalului în echivalent binar

  1. Înmulțiți numărul zecimal fracționar cu 2.
  2. Partea integrală a numărului zecimal rezultat va fi prima cifră a numărului binar al fracțiunii.
  3. Repetați pasul 1 folosind doar o parte fracțională a numărului zecimal și apoi pasul 2.

C) Combină ambele părți integrale și fracționale ale numărului binar.

Ilustrare :

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 pentru a demonstra pașii de mai sus:

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;> }>

Java




// 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>>>> ));> > > 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-->>>> );> > }> > 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)>>> ));> > > 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)>>> );> > }> > 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>

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 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)>>> .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)>>> .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));>

Ieșire

100.011 110.11111 

Complexitatea timpului: O(len(n))
Spațiu auxiliar: O(len(n))

unde len() este numărul total de cifre conținute în numărul n.
Convertiți fracția binară în zecimală