二进制,八进制,十六进制到十进制程序

时间:2016-10-24 14:47:34

标签: c++

所以我有这个编写一个C ++程序,将二进制,八进制或十六进制数转换为十进制数,我做了,这是我的代码:

#include <iostream>
#include <string>
#include <cmath>
using namespace std;

long two2ten(string s)
{
    int m = 0;
    for (size_t i = 0; i < s.size(); i++)
    {
        m = 2 * m + (s[i] - '0');
    }
    return m;
}

long oct2dec(int n)
{
    long int m = 0, i = 0;
    while (n != 0)
    {
        m = m + (n % 10)* pow(8, i++);
        n = n / 10;
    }
    return m;
}
long hex2dec(string s)
{
    long result = 0;

    for (size_t i = 0; i < s.length(); i++) 
    {
        if (s[i] >= 48 && s[i] <= 57)
        {
            result += (s[i] - 48)*pow(16, s.length() - i - 1);
        }
        else if (s[i] >= 65 && s[i] <= 70) {
            result += (s[i] - 55)*pow(16, s.length() - i - 1);
        }
        else if (s[i] >= 97 && s[i] <= 102) {
            result += (s[i] - 87)*pow(16, s.length() - i - 1);
        }
    }
    return result;
}

int main()
{
    int k, n;
    string s;
    while (cin >> k)
    {
        if (k == 2)
        {
            cin >> s;
            cout << two2ten(s) << endl;
        }
        else if (k == 8)
        {
            cin >> n;
            cout << oct2dec(n) << endl;
        }
        else if (k == 16)
        {
            cin >> s;
            cout << hex2dec(s) << endl;
        }
        else
        {
            cin >> n;
        }
    }
    return 0;
}

现在,它对我来说非常好,但它给我的老师带来了编译错误(他没有说明原因)。我已经在墙上撞了几天了,我仍然无法得到可能出错的东西。请问有人帮我吗?

1 个答案:

答案 0 :(得分:3)

你的问题是,当调用那些pow()函数时,第二个参数(从size_t到double)发生了隐式转换。添加static_cast应该会有所帮助。

要自己查看问题,请使用

编译代码
-pedantic -pedantic-errors -Wall -Wextra -Werror -Wconversion