将小数转换成二进制数

给定小数n和整数k,将小数n转换为小数点后精度达到k的等价二进制数。 例如:

null
Input: n = 2.47, k = 5Output: 10.01111Input: n = 6.986 k = 8Output: 110.11111100

我们强烈建议您在继续解决方案之前单击此处并进行练习。

A) 将十进制数的整数部分转换为等价的二进制数

  1. 将十进制数除以2,并将余数存储在数组中。
  2. 把商除以2。
  3. 重复步骤2,直到商等于零。
  4. 等价的二进制数与第一步的所有余数相反。

B) 将小数的小数部分转换为等价的二进制

  1. 将小数乘以2。
  2. 结果十进制数的整数部分将是分数二进制数的第一位。
  3. 只使用小数的小数部分重复步骤1,然后重复步骤2。

C) 将二进制数的整数部分和小数部分结合起来。 插图

Let's take an example for n = 4.47 k = 3Step 1: Conversion of 4 to binary1. 4/2 : Remainder = 0 : Quotient = 22. 2/2 : Remainder = 0 : Quotient = 13. 1/2 : Remainder = 1 : Quotient = 0So equivalent binary of integral part of decimal is 100.Step 2: Conversion of .47 to binary1. 0.47 * 2 = 0.94, Integral part: 02. 0.94 * 2 = 1.88, Integral part: 13. 0.88 * 2 = 1.76, Integral part: 1So equivalent binary of fractional part of decimal is .011Step 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<bits/stdc++.h>
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 < right; left++, right--)
{
// 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 < right; left++, right--)
{
// 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
// 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

<script>
// 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 < right; left++, right--)
{
// 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) + "</br>" );
n = 6.986;
k = 5;
document.write(decimalToBinary(n, k));
</script>


输出:

100.011110.11111

时间复杂性: O(len(n)) 辅助空间: O(len(n)) 其中len()是数字n中包含的总位数。 将二进制分数转换成十进制 参考: http://cs.furman.edu/digitaldomain/more/ch6/dec_frac_to_bin.htm http://www.cquestions.com/2011/07/c-program-for-fractional-decimal-to.html 本文由 Shubham Bansal .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享