网站建设 中标,九洋建设官方网站,微信平台制作网站开发,wordpress调用页面列表二进制数转字符串。给定一个介于0和1之间的实数#xff08;如0.72#xff09;#xff0c;类型为double#xff0c;打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示#xff0c;则打印“ERROR”。
示例1: 输入#xff1a;0.625输出#xff1a;0…二进制数转字符串。给定一个介于0和1之间的实数如0.72类型为double打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示则打印“ERROR”。
示例1: 输入0.625输出0.101示例2: 输入0.1输出ERROR提示0.1无法被二进制准确表示提示
32位包括输出中的 0. 这两位。题目保证输入用例的小数位数最多只有 6 位
思路本题目简单地二进制转换问题
十进制的小数转换为二进制的方法为 十进制小数乘2取出整数作为二进制小数第一位余下的小数再乘以2取出整数作为小数第二位如此反复直至余下的小数为0。
例
十进制 0.375
0.375 * 2 0.75 ———— 0 0.75的整数部分为0
0.75 * 2 1.5 ———— 11.5的整数部分为1
0.5 * 2 1 ———— 11的整数部分为1且没有余数
则二进制小数位 0.011
十进制 0.675
0.625 * 2 1.25 ———— 11.25的整数部分为1
0.25 * 2 0.5 ———— 00.5的整数部分为0
0.5 * 2 1 ———— 11的整数部分为1且没有余数
则二进制小数位 0.101
十进制 0.38
0.38 * 2 0.76 ———— 00.76的整数部分为0
0.76* 2 1.52 ———— 11.52的整数部分为1
0.52* 2 1.04 ———— 11.04的整数部分为1
0.04*2 0.08 ———— 0 (0.08的整数部分为0
.......
则二进制小数位 0.0110........
class Solution {
public:string printBin(double num) {string str 0.;int sum 0;while(sum32num){num*2;sum;if(num1){str.push_back(1);num-1;} else str.push_back(0);}return sum32?ERROR:str;}
};