logo

소수를 이진수로 변환

분수 십진수 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. 몫이 0이 될 때까지 2단계를 반복합니다.
  4. 동등한 이진수는 1단계의 모든 나머지 부분과 반대가 됩니다.

B) 십진수의 분수 부분을 이진수로 변환합니다.

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

위의 단계를 보여주는 프로그램:

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

>

>

파이썬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# 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>

>

자바 int를 두 배로 늘리기
>

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

>

>

산출

100.011 110.11111>

시간 복잡도: O(len(n))
보조 공간: O(len(n))

여기서 len()은 숫자 n에 포함된 총 숫자입니다.
이진 분수를 십진수로 변환