혜랑's STORY

[BOJ_C++] 5692번 : 팩토리얼 진법 본문

무지성 공부방/알고리즘 해결

[BOJ_C++] 5692번 : 팩토리얼 진법

hyerang0125 2021. 6. 30. 13:01

문제

 

풀이

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int factorial_number(string x) {
	int num = 0, i = 0;
	int fac[5] = { 1,2,6,24,120 };

	for (int j = x.length()-1; j>=0; j--) {
		num += fac[i++] * (x[j] - '0');
	}

	return num;
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);

	string x;
	while (1) {
		cin >> x;
		if (x == "0")
			break;
		printf("%d\n", factorial_number(x));
	}
	return 0;
}
  • 입력을 받고 "0"이라면 종료한다.
  • factorial_number() 함수는 문제에서 원하는 팩토리얼 진법 수를 10진수로 표현하는 함수이다.
  • 문제의 조건에서 5자리가 최대라고 하였으므로 5!까지 계산한 값을 fac배열에 미리 넣어두었다.
  • for문을 활용하여 x의 뒤부터 해당하는 자리의 팩토리얼 값을 곱한 뒤 num에 저장하였고 최종 num을 반환하였다.

 

결과