您的位置:首页 > 其它

从键盘输入某个十进制小数或整数,转换成对应的二进制小数并输出。 (查询十进制小数转换成二进制小数的算法,使用循环来实现。 最多保留小数位后7位数字即可)算法

2017-07-15 11:09 1091 查看
/*算法:把小数分成两截,一截是整数,一截是小数。让整数除以2取余,倒叙输出来

打印出二进制(第一个数为个位,第二个数为10位,即乘以10,第三位数为百位,

即乘以100。。以此类推,即循环乘以10),直到除数

为0为止。小数乘以2,取整然后打印2进制,直到小数部分为0为止,或者打印小数

后7位为止。(实就是每次循环让第一个数x0.1,第二个数x0.01,依次如此。

最后相加,打印累加的值)*/

import java.util.*;

public class TenToTwo

{
public static void main(String[] args){
int sumInt=0,h=0;
double sumDouble=0,j=0.1;
System.out.print("请输入一个数:");
Scanner sc=new Scanner(System.in);
double num=sc.nextDouble();
int numInt=(int)num;//取整数部分
double numD=num-numInt;//取小数部分
//整数部分求二进制
for(int i=1;;i=i*10){
/*int chuShu=numInt/2;
int yuShu=numInt%2;//余数部分为2进制的一位
sumInt+=yuShu*i;
numInt=chuShu;//把除数赋予整数,循环让下一次去除*/
//上面的代码可以简化成下面的两行
sumInt+=numInt%2*i;
numInt=numInt/2;
if(numInt==0){
break;
}
}
//小数部分求二进制
for(;;j=j*0.1){
/*int zhengShu=(int)(numD*2);//求二进制数
sumDouble+=zhengShu*j;//一个二进制数*0.1,下一个则乘以0.01,依次,最后累加
double xiaoShu=numD*2-zhengShu;//剩下的小数
numD=xiaoShu;//剩下的小数赋予numD去循环,因为剩下的小数也要继续乘以2*/
//上面的代码可以简化如下两行:
sumDouble+=(int)(numD*2)*j;
numD=numD*2-(int)(numD*2);
h++;//计已经有了小数点后多少位数
if(numD==0||h==7){
break;
}
}
System.out.print(num+"的二进制数为:"+(sumInt+sumDouble));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐