백준 11816 c++

magicdrill·2024년 5월 25일

백준 문제풀이

목록 보기
355/673

백준 11816 c++

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;
}

0개의 댓글