C++十进制小数转二进制

2020-05-02  本文已影响0人  Virtualer

之前经常接触的都是十进制整数转换二进制,记录一下十进制小数转化二进制的方法。
小数分为整数区域和小数区域,以小数点相隔开。整数部分转化方式是对2取余除2的方法,而小数部分则是相反,对小数乘2取整数部分的方法:


小数部分转化二进制(图片来自公众号:IT服务圈儿)

根据这种方式就可以自己实现一个转化器,代码搞起来

#include <iostream>
#include <string>

using namespace std;

string IntegerPart(const string &str)
{
    string retStr;
    long temp = strtol(str.c_str(), nullptr, 10);
    while (temp) {
        retStr += to_string(temp % 2);
        temp /= 2;
    }
    return retStr.empty() ? "0" : retStr;
}

string DecimalPart(const string &str)
{
    string retStr;
    float temp = strtof(str.c_str(), nullptr);
    while (temp != 0.0) {
        retStr += to_string((int) (temp * 2));
        string tempStr = to_string(temp * 2);
        tempStr[0] = '0';
        temp = strtof(tempStr.c_str(), nullptr);
    }
    return retStr;
}

int main(int argc, char** argv)
{
    string inputStr;
    while (getline(cin, inputStr)) {
        size_t pos = inputStr.find('.');
        string integerStr;
        string decimalStr;
        if (pos == string::npos) {
            decimalStr = "";
            integerStr = IntegerPart(inputStr);
        } else {
            integerStr = inputStr.substr(0, inputStr.find('.'));
            decimalStr = inputStr.substr(inputStr.find('.') + 1, inputStr.size());
            integerStr = IntegerPart(integerStr);
            decimalStr = DecimalPart(string("0.") + decimalStr);
        }
        if (!decimalStr.empty()) {
            integerStr += ".";
            integerStr += decimalStr;
        }
        cout << integerStr << endl;
    }
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读