所以我有这个编写一个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;
}
现在,它对我来说非常好,但它给我的老师带来了编译错误(他没有说明原因)。我已经在墙上撞了几天了,我仍然无法得到可能出错的东西。请问有人帮我吗?
答案 0 :(得分:3)
你的问题是,当调用那些pow()函数时,第二个参数(从size_t到double)发生了隐式转换。添加static_cast应该会有所帮助。
要自己查看问题,请使用
编译代码-pedantic -pedantic-errors -Wall -Wextra -Werror -Wconversion