程序员面试金典 - 面试题 05.02. 二进制数转字符串(浮点型 转 二进制小数,乘2取整)

1. 题目

二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。

如果该数字不在0和1之间,或者无法精确地用32位以内的二进制表示,则打印“ERROR”。

示例1:
 输入:0.625
 输出:"0.101"
 
示例2:
 输入:0.1
 输出:"ERROR"
 提示:0.1无法被二进制准确表示
 
提示:
32位包括输出中的"0."这两位。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bianry-number-to-string-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 浮点数乘以进制2,取整数位添加到 二进制小数位后面
  • 浮点数舍去整数位,重复以上过程直至浮点数变成 0,若无法等于 0,则无法精确表示
class Solution {
public:
    string printBin(double num) {
    	if(num < 0 || num > 1.0)
    		return "ERROR";
    	string ans = "0.";
    	int bits = 2;
    	while(num > 0)
    	{
    		num *= 2;//*2 进制数
    		if(num >= 1.0)
    		{
    			ans += '1';
    			num -= 1;//舍去整数位
    		}
    		else
    			ans += '0';
    		bits++;
    		if(bits > 32)
    			return "ERROR";
    	}
    	return ans;
    }
};
发布了760 篇原创文章 · 获赞 947 · 访问量 27万+

猜你喜欢

转载自blog.csdn.net/qq_21201267/article/details/105050446
今日推荐