1.位运算 题六--用二进制表示十进制小数

题目:将十进制小数用二进制表示,如果不能用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);
      }


    }

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值