题目:将十进制小数用二进制表示,如果不能用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);
}
}
}
本文介绍了一种将十进制小数转换为二进制表示的算法,通过不断乘以2并判断结果是否大于1来确定二进制位上的数值。提供了两种实现方式:使用StringBuilder和数组,同时设置了32位小数的限制条件。
574





