5.2 二进制数转字符串

     《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。
     这里提供两种方法。第一种方法利用的是十进制小数转二进制小数的乘2取整法。对于值为1的二进制小数位,第一位的值为 2 − 1 = 0.5 2^{-1}=0.5 21=0.5,第二位的值为 2 − 2 = 0.25 2^{-2}=0.25 22=0.25,第三位的值为 2 − 1 = 0.125 2^{-1}=0.125 21=0.125,第四位的值为 2 − 1 = 0.0625 2^{-1}=0.0625 21=0.0625,…以此类推。第二种方法从第一位开始检查二进制小数中是否满足该二进制位为1,如果满足则在结果字符串中加一并且从原十进制小数中减去该二进制位的十进制值,否则加0原二进制数的值不变。然后进去下一轮迭代直到为0。实现代码如下所示。

//方法一
string printBinary(double num)
{
	if (num > 1 || num <= 0)
		return "ERROR";
	string binary;
	binary = binary + "0.";
	while (num>0)
	{
		if (binary.size() >= 32)
			return "ERROR";
		double r = num * 2;
		if (r >= 1)
		{
			binary = binary + "1";
			num = r - 1;
		}
		else
		{
			binary = binary + "0";
			num = r;
		}
	}
	return binary;
}


//方法二
string printBinary2(double num)
{
	if (num > 1 || num <= 0)
		return "ERROR";
	string binary;
	double frac = 0.5;
	binary = binary + "0.";
	while (num > 0)
	{
		if (binary.size() >= 32)
			return "ERROR";
		if (num >= frac)
		{
			binary = binary + "1";
			num = num - frac;
		}
		else
		{
			binary = binary + "0";
		}
		frac = frac / 2;
	}
	return binary;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qqssss121dfd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值