logo

Converteix fracció decimal en nombre binari

Donat una fracció decimal n i un enter k, convertiu el nombre decimal n en un nombre binari equivalent fins a k precisió després del punt decimal.

Exemples:



Input: n = 2.47, k = 5 Output: 10.01111 Input: n = 6.986 k = 8 Output: 110.11111100>
Us recomanem que feu clic aquí i practiqueu-ho abans de passar a la solució.

A) Converteix la part integral de decimal en equivalent binari

  1. Divideix el nombre decimal per 2 i emmagatzema les restes en una matriu.
  2. Dividiu el quocient per 2.
  3. Repetiu el pas 2 fins a obtenir el quocient igual a zero.
  4. El nombre binari equivalent seria el revés de totes les restes del pas 1.

B) Converteix la part fraccionària de decimal en equivalent binari

  1. Multiplica el nombre decimal fraccionari per 2.
  2. La part integral del nombre decimal resultant serà el primer dígit de la fracció del nombre binari.
  3. Repetiu el pas 1 utilitzant només una part fraccionària del nombre decimal i després el pas 2.

C) Combina la part integral i la fraccionària d'un nombre binari.



Il·lustració :

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>

Programa per demostrar els passos anteriors:

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>

>

>

Python 3




# 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>

>

pitó de cadena f
>

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

>

>

Sortida

100.011 110.11111>

Complexitat temporal: O(len(n))
Espai auxiliar: O(len(n))

on len() és el nombre total de dígits que conté el nombre n.
Converteix fracció binària a decimal