给定一个介于0和1之间的实数,(如0.625),类型为double,打印它的二进制表示(0.101,因为小数点后的二进制分别表示0.5,0.25,0.125......)。
如果该数字无法精确地用32位以内的二进制表示,则打印"ERROR"
分析:引入StringBuilder sb=new StringBuilder("0.");来做字符串的拼接
sb.append("x");来追加某个字符串;
if (sb.length()>32){
System.out.println("ERROR");
return;
}来实现“如果该数字无法精确地用32位以内的二进制表示,则打印"ERROR"的要求其中"return:"用于返回值为void的方法的终止
以0.625为例子,0.625*2=1.25,1.25挪去1以后为0.25
0.25*2=0.5,0.5挪去0后还是0.5
0.5*2=1.0,1.0挪去一后为0
0*2=0.结束,所以循环结束的条件为变量等于0,循环运行的条件就是变量不等于0
代码实现:
import java.util.Scanner;
Scanner sc=new Scanner(System.in);
StringBuilder sb=new StringBuilder("0.1");
double num=sc.nextDouble();
while(num!=0)
{num=num*2;
if(num>=1)
{num-=1;
sb.append("1");
}
else
sb.append("0");
if(sb.length()>32)
{System.out.println("ERROR");
return;
}
System.out.println(sb.toString());
}