题目描述
给定一个介于00和11之间的实数,(如0.6250.625),类型为double,打印它的二进制表示(如:0.1010.101)
如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”
输入格式
一个双精度浮点数N
输出格式
该浮点数的二进制表示
测试样例
Sample Input 1
0.625
Copy
Sample Output 1
0.101
Copy
提示
小数点后的二进制分别表示0.5,0.25.0.125..... 比如:
二进制 ==> 十进制
0.1 ==> 0.5
0.01 ==> 0.25
0.001 ==> 0.125
0.11 ==> 0.75
以此类推。
取值范围:
0≤N≤10≤N≤1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
double n,a;
int i=2;
char m[100]={'0','.'};
scanf ("%lf",&n);
while (n)
{
a=n*2;
if (a>=1)
{
m[i]='1';
n=a-1;
}
else
{
m[i]='0';
n=a;
}
if (i>34)
{
printf ("ERROR");
return 0;
}
i++;
}
printf ("%s",m);
return 0;
}