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