jason1990

看某华为面试题目有感,十六进制转换为二进制很简单,同理八进制,四进制转换为二进制亦很简单。

参考网上代码,二进制转换为十进制亦很简单,不过这想法真的是很巧妙,学习到了。

//十六进制转换为二进制
string HexToBin(string& str)
{
    string res;
    size_t i, len = str.length();
    if (len <= 0) return res;

    for (i = 0; i < len; i++)
    {
        if (str[i] == \'0\')
            res += "0000";
        else if (str[i] == \'1\')
            res += "0001";
        else if (str[i] == \'1\')
            res += "0001";
        else if (str[i] == \'2\')
            res += "0010";
        else if (str[i] == \'3\')
            res += "0011";
        else if (str[i] == \'4\')
            res += "0100";
        else if (str[i] == \'5\')
            res += "0101";
        else if (str[i] == \'6\')
            res += "0110";
        else if (str[i] == \'7\')
            res += "0111";
        else if (str[i] == \'8\')
            res += "1000";
        else if (str[i] == \'9\')
            res += "1001";
        else if (str[i] == \'a\')
            res += "1010";
        else if (str[i] == \'b\')
            res += "1011";
        else if (str[i] == \'c\')
            res += "1100";
        else if (str[i] == \'d\')
            res += "1101";
        else if (str[i] == \'e\')
            res += "1110";
        else if (str[i] == \'f\')
            res += "1111";
        else {
            cout << "--ERROR--" << endl; break;
        }
    }
    return res;
}

//进制转换中间变量
struct TBigInt
{
    int len;
    char value[10000];
    TBigInt() :len(0)
    {
        for (size_t i = 0; i < 10000; i++)
            value[i] = 0;
    }
};

void AddBit(TBigInt& data, char BitVal)
{
    size_t i = 0, len = data.len;
    for (i = 0; i < len; i++)
    {
        data.value[i] *= 2;
    }
    data.value[0] += BitVal;
    for (i = 0; i < len; i++)
    {
        data.value[i + 1] += data.value[i] / 10;
        data.value[i] %= 10;
    }
    if (data.value[data.len])
        ++data.len;
}

string OutputIntStr(TBigInt& data)
{
    int i;
    string res;
    if (0 == data.len)
    {
        res.push_back(\'\0\');
    }
    else
    {
        for (i = data.len - 1; i >= 0; --i)
        {
            res.push_back(data.value[i] + \'0\');
        }
    }
    return res;
}

//二进制字符串转换为十进制字符串
string Bin2Deci(const string& str)
{
    size_t i;
    TBigInt data;
    for (i = 0; i < str.length(); i++)
    {
        AddBit(data, str[i] == \'1\' ? 1 : 0);
    }
    return OutputIntStr(data);
}

int main()
{
    int pos;
    string str, res;
    getline(cin, str);
    res = HexToBin(str);
    for (size_t i = 0; i < res.length(); i++)
    {
        if (res[i] != \'0\')
        {
            pos = i; break;
        }
    }
    res = res.substr(pos);
    cout << str << "->" << res << endl;
    cout << res << "->" << Bin2Deci(res) << endl;
    system("pause");
    return 0;
}

 

分类:

技术点:

相关文章: