Konverter decimalbrøk til binært tal
Givet en brøk decimaltal n og heltal k, konverter decimaltal n til ækvivalent binært tal op til k præcision efter decimalkomma.
Eksempler:
Input: n = 2.47, k = 5 Output: 10.01111 Input: n = 6.986 k = 8 Output: 110.11111100Vi anbefaler stærkt, at du klikker her og øver dig på det, inden du går videre til løsningen.
A) Konverter den integrerede del af decimal til binær ækvivalent
- Divider decimaltallet med 2 og gem resterne i array.
- Divider kvotienten med 2.
- Gentag trin 2, indtil vi får kvotienten lig med nul.
- Ækvivalent binært tal ville være omvendt af alle rester af trin 1.
B) Konverter brøkdelen af decimal til binær ækvivalent
- Multiplicer brøkdecimaltallet med 2.
- Integral del af det resulterende decimaltal vil være det første ciffer i brøkens binære tal.
- Gentag trin 1 med kun en brøkdel af decimaltal og derefter trin 2.
C) Kombiner både integral og brøkdel af binært tal.
Illustration :
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 til at demonstrere ovenstående trin:
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>> 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> |
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));> |
Produktion
100.011 110.11111
Tidskompleksitet: O(len(n))
Hjælperum: O(len(n))
hvor len() er det samlede antal cifre, der indeholder i nummer n.
Konverter binær brøk til decimal