Given a real number between 0 and 1 (e.g., 0.72) that is passed in as a double, print the binary representation. If the number cannot be represented accurately in binary with at most 32 characters, print” ERROR:’
Examples:
Input : (0.625)10Output : (0.101)2Input : (0.72)10Output : ERROR
Solution: First, let’s start off by asking ourselves what a non-integer number in binary looks like. By analogy to a decimal number, the binary number 0 .1012 would look like:
0. 1012 = 1 * 1/21 + 0 *1/22 + 1 * 1/23 .
Method 1: Multiply the decimal part by 2
To print the decimal part, we can multiply by 2 and check if 2*n is greater than or equal to 1. This is essentially “shifting” the fractional sum. That is:
r = 210 * n; = 210 * 0.1012; = 1 * 1/20 + 0 *1/21 + 1 * 1/22; = 1.012;
If r >= 1, then we know that n had a 1 right after the decimal point. By doing this continuously, we can check every digit.
// C++ program to binary real number to string #include <iostream> #include<string> using namespace std;
// Function to convert Binary real // number to String string toBinary( double n)
{ // Check if the number is Between 0 to 1 or Not
if (n >= 1 || n <= 0)
return "ERROR" ;
string answer;
double frac = 0.5;
answer.append( "." );
// Setting a limit on length: 32 characters.
while (n > 0)
{
//Setting a limit on length: 32 characters
if (answer.length() >= 32)
return "ERROR" ;
// Multiply n by 2 to check it 1 or 0
double b = n * 2;
if (b >= 1)
{
answer.append( "1" );
n = b - 1;
}
else
{
answer.append( "0" );
n = b;
}
}
return answer;
} // Driver code int main()
{ // Input value
double n = 0.625;
string result = toBinary(n);
cout<< "(0" << result << ") in base 2" <<endl;
double m = 0.72;
result= toBinary(m);
cout<< "(" <<result<< ")" <<endl;
} // This code is contributed by Himanshu Batra |
// Java program to Binary real number to String. import java.lang.*;
import java.io.*;
import java.util.*;
// Class Representation of Binary real number // to String class BinaryToString
{ // Main function to convert Binary real number
// to String
static String printBinary( double num)
{
// Check Number is Between 0 to 1 or Not
if (num >= 1 || num <= 0 )
return "ERROR" ;
StringBuilder binary = new StringBuilder();
binary.append( "." );
while (num > 0 )
{
/* Setting a limit on length: 32 characters,
If the number cannot be represented
accurately in binary with at most 32
character */
if (binary.length() >= 32 )
return "ERROR" ;
// Multiply by 2 in num to check it 1 or 0
double r = num * 2 ;
if (r >= 1 )
{
binary.append( 1 );
num = r - 1 ;
}
else
{
binary.append( 0 );
num = r;
}
}
return binary.toString();
}
// Driver Code
public static void main(String[] args)
{
double num1 = 0.625 ; // Input value in Decimal
String output = printBinary(num1);
System.out.println( "(0" + output + ") in base 2" );
double num2 = 0.72 ;
output = printBinary(num2);
System.out.println( "(" + output + ") " );
}
} |
# Python3 program to binary real number to string # Function to convert Binary real # number to String def toBinary(n):
# Check if the number is Between 0 to 1 or Not
if (n > = 1 or n < = 0 ):
return "ERROR"
answer = ""
frac = 0.5
answer = answer + "."
# Setting a limit on length: 32 characters.
while (n > 0 ):
# Setting a limit on length: 32 characters
if ( len (answer) > = 32 ):
return "ERROR"
# Multiply n by 2 to check it 1 or 0
b = n * 2
if (b > = 1 ):
answer = answer + "1"
n = b - 1
else :
answer = answer + "0"
n = b
return answer
# Driver code if __name__ = = '__main__' :
n = 0.625
result = toBinary(n)
print ( "(0" , result, ") in base 2" )
m = 0.72
result = toBinary(m)
print ( "(" , result, ")" )
# This code is contributed by # Sanjit_Prasad |
// C# program to Binary real number to String. using System;
using System.Text;
// Class Representation of Binary real number // to String class BinaryToString
{ // Main function to convert Binary real number
// to String
static String printBinary( double num)
{
// Check Number is Between 0 to 1 or Not
if (num >= 1 || num <= 0)
return "ERROR" ;
StringBuilder binary = new StringBuilder();
binary.Append( "." );
while (num > 0)
{
/* Setting a limit on length: 32 characters,
If the number cannot be represented
accurately in binary with at most 32
character */
if (binary.Length >= 32)
return "ERROR" ;
// Multiply by 2 in num to check it 1 or 0
double r = num * 2;
if (r >= 1)
{
binary.Append(1);
num = r - 1;
}
else
{
binary.Append(0);
num = r;
}
}
return binary.ToString();
}
// Driver Code
public static void Main()
{
double num1 = 0.625; // Input value in Decimal
String output = printBinary(num1);
Console.WriteLine( "(0 " + output + ") in base 2" );
double num2 = 0.72;
output = printBinary(num2);
Console.WriteLine( "(" + output + ") " );
}
} |
<?php // PHP program to binary real number // to string // Function to convert Binary real // number to String function toBinary( $n )
{ // Check if the number is Between
// 0 to 1 or Not
if ( $n >= 1 || $n <= 0)
return "ERROR" ;
$answer = "" ;
$frac = 0.5;
$answer .= "." ;
// Setting a limit on length: 32 characters.
while ( $n > 0)
{
//Setting a limit on length: 32 characters
if ( strlen ( $answer ) >= 32)
return "ERROR" ;
// Multiply n by 2 to check it 1 or 0
$b = $n * 2;
if ( $b >= 1)
{
$answer .= "1" ;
$n = $b - 1;
}
else
{
$answer .= "0" ;
$n = $b ;
}
}
return $answer ;
} // Driver code // Input value $n = 0.625;
$result = toBinary( $n );
echo "(0" . $result . ") in base 2\n" ;
$m = 0.72;
$result = toBinary( $m );
echo "(" . $result . ")" ;
// This code is contributed by mits ?> |
<script> // JavaScript program to binary real number to string // Function to convert Binary real // number to String function toBinary(n){
// Check if the number is Between 0 to 1 or Not
if (n >= 1 || n <= 0)
return "ERROR"
let answer = ""
let frac = 0.5
answer = answer + "."
// Setting a limit on length: 32 characters.
while (n > 0){
// Setting a limit on length: 32 characters
if (answer.length >= 32){
return "ERROR"
}
// Multiply n by 2 to check it 1 or 0
b = n * 2
if (b >= 1){
answer = answer + "1"
n = b - 1
}
else {
answer = answer + "0"
n = b
}
}
return answer
} // Driver code let n = 0.625 let result = toBinary(n) document.write(`(0 ${result}) in base 2`, "</br>" )
let m = 0.72 result = toBinary(m) document.write(`(${result})`, "</br>" )
// This code is contributed by Shinjanpatra </script> |
Output:
(0.101) in base 2 (ERROR)
Method 2
Alternatively, rather than multiplying the number by two and comparing it to 1, we can compare the number to . 5, then . 25, and so on. The code below demonstrates this approach.
// C++ program to Binary real number to String. #include <iostream> #include<string> using namespace std;
// Function to convert Binary real // number to String string toBinary( double n)
{ // Check if the number is Between 0 to 1 or Not
if (n >= 1 || n <= 0)
return "ERROR" ;
string answer;
double frac = 0.5;
answer.append( "." );
// Setting a limit on length: 32 characters.
while (n > 0)
{
// 32 char max
if (answer.length() >= 32)
return "ERROR" ;
// compare the number to .5
if (n >= frac)
{
answer.append( "1" );
n = n- frac;
}
else
{
answer.append( "0" );
}
frac /= 2;
}
return answer;
} // Driver code int main()
{ // Input value
double n = 0.625;
string result = toBinary(n);
cout<< "(0" << result << ") in base 2" <<endl;
double m = 0.72;
result= toBinary(m);
cout<< "(" <<result<< ")" <<endl;
} |
// Java program to Binary real number to String. import java.lang.*;
import java.io.*;
import java.util.*;
// Class representation of Binary real number // to String class BinaryToString
{ // Main function to convert Binary real
// number to String
static String printBinary( double num)
{
// Check Number is Between 0 to 1 or Not
if (num >= 1 || num <= 0 )
return "ERROR" ;
StringBuilder binary = new StringBuilder();
double frac = 0.5 ;
binary.append( "." );
while (num > 0 )
{
/* Setting a limit on length: 32 characters,
If the number cannot be represented
accurately in binary with at most 32
characters */
if (binary.length() >= 32 )
return "ERROR" ;
// It compare the number to . 5.
if (num >= frac)
{
binary.append( 1 );
num -= frac;
}
else binary.append( 0 );
// Now it become 0.25
frac /= 2 ;
}
return binary.toString();
}
// Driver Code
public static void main(String[] args)
{
double num1 = 0.625 ; // Input value in Decimal
String output = printBinary(num1);
System.out.println( "(0" + output + ") in base 2" );
double num2 = 0.72 ;
output = printBinary(num2);
System.out.println( "(" + output + ") " );
}
} |
# Python3 program to Binary real number to String. # Function to convert Binary real # number to String def toBinary(n):
# Check if the number is Between
# 0 to 1 or Not
if (n > = 1 or n < = 0 ):
return "ERROR" ;
frac = 0.5 ;
answer = "." ;
# Setting a limit on length: 32 characters.
while (n > 0 ):
# 32 char max
if ( len (answer) > = 32 ):
return "ERROR" ;
# compare the number to .5
if (n > = frac):
answer + = "1" ;
n = n - frac;
else :
answer + = "0" ;
frac = (frac / 2 );
return answer;
# Driver code # Input value n = 0.625 ;
result = toBinary(n);
print ( "( 0" , result, ") in base 2" );
m = 0.72 ;
result = toBinary(m);
print ( "(" , result, ")" );
# This code is contributed # by mits |
// C# program to Binary real number to String. using System;
// Class representation of Binary // real number to String class BinaryToString
{ // Main function to convert Binary
// real number to String
static string printBinary( double num)
{
// Check Number is Between
// 0 to 1 or Not
if (num >= 1 || num <= 0)
return "ERROR" ;
string binary = "" ;
double frac = 0.5;
binary += "." ;
while (num > 0)
{
/* Setting a limit on length: 32 characters,
If the number cannot be represented
accurately in binary with at most 32
characters */
if (binary.Length >= 32)
return "ERROR" ;
// It compare the number to . 5.
if (num >= frac)
{
binary += "1" ;
num -= frac;
}
else binary += "0" ;
// Now it become 0.25
frac /= 2;
}
return binary;
}
// Driver Code
public static void Main()
{
double num1 = 0.625; // Input value in Decimal
String output = printBinary(num1);
Console.WriteLine( "(0" + output + ") in base 2" );
double num2 = 0.72;
output = printBinary(num2);
Console.WriteLine( "(" + output + ") " );
}
} // This code is contributed by mits |
<?php // PHP program to Binary real number to String. // Function to convert Binary real // number to String function toBinary( $n )
{ // Check if the number is Between
// 0 to 1 or Not
if ( $n >= 1 || $n <= 0)
return "ERROR" ;
$frac = 0.5;
$answer = "." ;
// Setting a limit on length: 32 characters.
while ( $n > 0)
{
// 32 char max
if ( strlen ( $answer ) >= 32)
return "ERROR" ;
// compare the number to .5
if ( $n >= $frac )
{
$answer .= "1" ;
$n = $n - $frac ;
}
else
{
$answer .= "0" ;
}
$frac = ( $frac / 2);
}
return $answer ;
} // Driver code // Input value $n = 0.625;
$result = toBinary( $n );
print ( "(0" . $result . ") in base 2\n" );
$m = 0.72;
$result = toBinary( $m );
print ( "(" . $result . ")" );
// This code is contributed // by chandan_jnu ?> |
<script> // Javascript program to Binary real // number to String. // Main function to convert Binary // real number to String function printBinary(num)
{ // Check Number is Between
// 0 to 1 or Not
if (num >= 1 || num <= 0)
return "ERROR" ;
let binary = "" ;
let frac = 0.5;
binary += "." ;
while (num > 0)
{
/* Setting a limit on length: 32 characters,
If the number cannot be represented
accurately in binary with at most 32
characters */
if (binary.length >= 32)
return "ERROR" ;
// It compare the number to . 5.
if (num >= frac)
{
binary += "1" ;
num -= frac;
}
else binary += "0" ;
// Now it become 0.25
frac = frac / 2;
}
return binary;
} // Driver code // Input value in Decimal let num1 = 0.625; let output = printBinary(num1); document.write( "(0" + output +
") in base 2" + "</br>" );
let num2 = 0.72; output = printBinary(num2); document.write( "(" + output + ") " );
// This code is contributed by rameshtravel07 </script> |
Output:
(0.101) in base 2 (ERROR)
Both approaches are equally good; choose the one you feel most comfortable with.
This article is contributed by Mr. Somesh Awasthi.