무지성 공부방/알고리즘 해결
[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을 반환하였다.