题目:将十进制小数用二进制表示,如果不能用32位小数表示,则输出“ERROR”
思路:1.将小数乘以2,若结果大于1,则将二进制小数位上表示1,并将结果减1
2.若结果小于1,则继续乘以2,循环1,2两步,直至结果等于0
3.若小数的位数超过34位,则输出“ERROR”,结束循环。
public class erjinzhixiaoshu
{
public static void main(String args[])
{
double num=0.625;
StringBuilder sb=new StringBuilder ("0.");
while(num>0)
{
num=num*2;//乘以2,挪整
if(num>=1)
{
sb.append("1");//乘以2后大于1,则在后面添1,
num=num-1;//消掉整数部分
}
else{
sb.append("0");//添加0
num=num;
}
if(sb.length()>34)//若无法用法32位小数表示(加上0.两位,共34位)
{
System.out.print("ERROR");return ;
}
}
System.out.print(sb.toString());
}
}
2.数组实现(思路和上面一样,主要是复习了一下数组)
public class erjinzhixiaoshu
{
public static void main(String args[])
{ int i ;
int count=0;
double num=0.125;
String a[]=new String[34];
for(i=0;i<32&&num>0;i++)
{
num=num*2;
if(num>=1)
{
a[i]="1";
num=num-1;
}
else
{
a[i]="0";
num=num;
}
count++;
}
if(i==32)
{
System.out.print("ERROR");
}
else
{ String b="0.";
for(int m=0;m<count;m++)
{
b=b+ a[m];
}
System.out.print(b);
}
}
}