Conversión de un número real (entre 0 y 1) a string binaria

Dado un número real entre 0 y 1 (p. ej., 0,72) que se pasa como un doble, imprima la representación binaria. Si el número no se puede representar con precisión en binario con un máximo de 32 caracteres, escriba «ERROR:» 

Ejemplos: 

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

Input : (0.72)10
Output : ERROR
 

Solución: Primero, comencemos preguntándonos cómo es un número no entero en binario. Por analogía con un número decimal, el número binario 0 .101 2 se vería así: 
0. 101 2 = 1 * 1/2 1 + 0 *1/2 2 + 1 * 1/2 3

Método 1: Multiplica la parte decimal por 2

Para imprimir la parte decimal, podemos multiplicar por 2 y verificar si 2*n es mayor o igual a 1. Esto es esencialmente «desplazar» la suma fraccionaria. Eso es: 

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

Si r >= 1, entonces sabemos que n tenía un 1 justo después del punto decimal. Al hacer esto continuamente, podemos verificar cada dígito. 

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

Javascript

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

Producción: 

(0.101)  in base 2
(ERROR) 

Método 2

Alternativamente, en lugar de multiplicar el número por dos y compararlo con 1, podemos comparar el número con . 5, entonces . 25, y así sucesivamente. El siguiente código demuestra este enfoque.  

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\n");
 
$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>

Producción: 

(0.101)  in base 2
(ERROR)  

Ambos enfoques son igualmente buenos; elige el que te resulte más cómodo. 
Este artículo es una contribución del Sr. Somesh Awasthi . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *