首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二进制、八进制、十六进制到十进制程序

二进制、八进制、十六进制到十进制程序
EN

Stack Overflow用户
提问于 2016-10-24 22:47:34
回答 1查看 1.8K关注 0票数 2

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

代码语言:javascript
复制
#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;
}

现在,它对我来说工作得很好,但是它给我的老师带来了编译错误(他没有说为什么)。我的头撞在墙上已经有几天了,但我还是不明白哪里出了问题。有没有人能帮我一下?

EN

回答 1

Stack Overflow用户

发布于 2016-10-24 23:11:42

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

要自己查看问题,请使用以下命令编译代码

代码语言:javascript
复制
-pedantic -pedantic-errors -Wall -Wextra -Werror -Wconversion
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40221345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档