用C++写出代码,从键盘随机输入一个带小数点的十进制数,将该十进制数转化为二进制数,输入必须是合法的,否则重新输入
时间: 2024-10-08 12:24:06 浏览: 27
十进制的数转换成单精度的浮点数.rar
在C++中,你可以使用`std::cin`来获取用户的输入,并利用`std::string`存储小数部分,然后通过`bitset`或者手动转换的方式来把整数部分转成二进制字符串。这里是一个简单的示例代码:
```cpp
#include <iostream>
#include <sstream>
#include <bitset>
std::string decimalToBinary(double number) {
std::stringstream ss;
ss << std::setprecision(50); // 设置精度以包含小数点
ss << number;
std::string str = ss.str();
// 分割整数和小数部分
size_t point_pos = str.find('.');
if (point_pos == std::string::npos) { // 如果没有小数点,则直接返回整数部分的二进制表示
return bitset<64>(static_cast<int64_t>(str)).to_string();
}
// 获取整数部分
std::string integer_part = str.substr(0, point_pos);
// 整数部分转为二进制
bitset<64> int_binary(static_cast<int64_t>(stoi(integer_part)));
// 小数部分乘以2并转换为字符串,直到小数部分为0
std::string fraction_part = "";
for (size_t i = point_pos + 1; ; ++i) {
double temp = std::pow(10, -(i - point_pos)) * std::stod(str.substr(point_pos + 1));
int binary_digit = static_cast<int>(temp * (int)std::numeric_limits<double>::digits10);
fraction_part += (binary_digit > 0 ? '1' : '0');
if (temp == 0) break;
}
// 连接整数和小数二进制部分
return int_binary.to_string() + "." + fraction_part;
}
int main() {
double input;
while (true) {
std::cout << "请输入一个带小数点的十进制数: ";
if (std::cin >> input && input >= 0) { // 检查输入是否合法(非负)
std::string binary = decimalToBinary(input);
std::cout << "转化后的二进制数是: " << binary << std::endl;
break;
} else {
std::cerr << "输入无效,请重新输入!" << std::endl;
std::cin.clear(); // 清除输入流中的错误标志
}
}
return 0;
}
```
阅读全文