image.png
1. 数学知识
百度百科定义.png本题是一个数学问题,即小数如何转换为二进制数。
问题难点一:了解小数转换为二进制的定义。
2. 总结
思路:循环操作,每次num*2,判断是否大于等于1?true:则填充1,false则填充0,直至num为0时终止循环!
遇到的难题:
按照题目分析,0.1是无法转换为二进制的。因为 0.1->0.2->0.4->0.8->0.6->0.2->0.4....会一直循环下去。
那么不能转换为二进制的小数有什么规律呢?思维卡在这个误区。
2.1 使用缓存的思路
结题思路:将循环的num变量均缓存起来,然后判断num变量是否出现重复的情况。若出现重复则直接返回ERROR。
image.png但是实际运行起来,出现了double精度的问题,导致num并不是0.6而是无限接近0.6,故使用缓存的思路是行不通的。
2.2 控制循环次数思路(官方思路)
题目中明确表示,若无法使用32位二进制表示,则打印error。
那么结束循环的条件:num为0或者循环的次数为32次。
class Solution {
public String printBin(double num) {
//缓存的数据
StringBuilder sb = new StringBuilder("0.");
int i = 0;
boolean flag = false;
while (num != 0) {
if (num * 2 >= 1) {
//填充1
sb.append("1");
//获取num值
num = num * 2 - 1;
} else {
sb.append("0");
num = num * 2;
}
//循环终止条件
if (i++ == 32) {
sb=new StringBuilder("ERROR");
break;
}
}
return sb.toString();
}
}
网友评论