8진수, 16진수를 10진수로 바꾸는 간단한 문제이다.
#include <iostream>
#include <string>
using namespace std;
int oct(string N)
{
int answer = 0;
int i;
int div = 1;
for (i = N.length() - 1; i >= 0; i--)
{
answer += (N[i] - '0') * div;
div = div * 8;
}
return answer;
}
int hex(string N)
{
int answer = 0;
int i;
int div = 1;
for (i = N.length() - 1; i >= 0; i--)
{
if (N[i] == 'a')
{
answer += 10 * div;
}
else if (N[i] == 'b')
{
answer += 11 * div;
}
else if (N[i] == 'c')
{
answer += 12 * div;
}
else if (N[i] == 'd')
{
answer += 13 * div;
}
else if (N[i] == 'e')
{
answer += 14 * div;
}
else if (N[i] == 'f')
{
answer += 15 * div;
}
else
{
answer += (N[i] - '0') * div;
}
div = div * 16;
}
return answer;
}
int find_answer(string str)
{
int answer = 0;
if (str[0] == '0' && str[1] == 'x')
{
answer = hex(str.substr(2));
}
else if (str[0] == '0')
{
answer = oct(str.substr(1));
}
else
{
answer = stoi(str);
}
return answer;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string str;
cin >> str;
cout << find_answer(str) << "\n";
return 0;
}