将实数(介于0和1之间)转换为二进制字符串

给定一个介于0和1之间的实数(例如,0.72)作为双精度输入,打印二进制表示。如果数字不能以最多32个字符的二进制形式准确表示,请打印“错误:”

null

例如:

Input :  (0.625)10Output : (0.101)2Input : (0.72)10Output : ERROR 

解决方案: 首先,让我们先问问自己二进制中的非整数是什么样子。与十进制数类似,二进制数为0.101 2. 看起来像: 零点一零一 2. = 1 * 1/2 1. + 0 *1/2 2. + 1 * 1/2 3. .

方法1:将小数部分乘以2

要打印小数部分,我们可以乘以2并检查2*n是否大于或等于1。这实质上是“转移”分数和。也就是说:

r = 210 * n;  = 210 * 0.1012;  = 1 * 1/20 + 0 *1/21 + 1 * 1/22;  = 1.012;

如果r>=1,那么我们知道n在小数点后有一个1。通过不断这样做,我们可以检查每个数字。

C++

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

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

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

// 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
// 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" ;
$m = 0.72;
$result = toBinary( $m );
echo "(" . $result . ")" ;
// This code is contributed by mits
?>


输出:

(0.101)  in base 2(ERROR) 

方法2

或者,我们可以将数字与进行比较,而不是将数字乘以2并将其与1进行比较。5.那么。25岁,等等。下面的代码演示了这种方法。

C++

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

// Java program to Binary real number to String.
import java.lang.*;
import java.io.*;
import java.util.*;
// Class Reperesentation 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

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

// C# program to Binary real number to String.
using System;
// Class Reperesentation 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
// 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" );
$m = 0.72;
$result = toBinary( $m );
print ( "(" . $result . ")" );
// This code is contributed
// by chandan_jnu
?>


Javascript

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


输出:

(0.101)  in base 2(ERROR)  

两种方法都同样好;选择一个你觉得最舒服的。 本文由 Somesh Awasthi先生 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

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