문제
https://www.acmicpc.net/problem/5692
문제 요약
팩토리얼 진법 숫자가 주어졌을 때, 10진수로 변환하여 출력한다.
ex) 719 = 7 × 3! + 1 × 2! + 9 × 1! = 53
코드
#include <iostream>
using namespace std;
int main() {
// 시간 단축 코드
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
while (true) {
int num;
cin >> num;
// 반복문 종료 조건
if (num == 0) {
break;
}
// 초기 변수 설정
int res = 0;
int mul = 1;
int cnt = 1;
// 각 자릿수에 대한 팩토리얼 값 계산
while (num != 0) {
res += (num % 10) * mul;
num /= 10;
cnt++;
mul *= cnt;
}
cout << res << "\n";
}
}
코드 설명
1. 무한 반복문 내에서 팩토리얼 진법 숫자 num을 입력 받는다.
+ 입력 받은 수가 0이라면, 반복을 종료한다.
2. 변수를 초기 설정한다.
- res: 팩토리얼 진법 숫자를 10진수로 변환한 결과
- mul: 각 자릿수마다 곱해줄 숫자
- cnt: mul을 계산하기 위해 몇 번째 자릿수인지 체크하는 숫자
3. num이 0이 될 때까지 10으로 나누면서 1의 자릿수부터 팩토리얼 값을 계산하면서 res를 구한다.
+ %와 / 연산자를 이용한다.
4. res를 출력한다.
고찰
조금 당황했지만, 진수 계산 과정을 차근차근 생각해보면서 구현하면 어렵지 않다.
C++ 기준 입출력 시간 단축 코드를 넣어주어야 시간초과가 발생하지 않는다.
'Algorithm Problems > 수학' 카테고리의 다른 글
[백준/C++] 9471번: 피사노 주기 (2) | 2024.08.04 |
---|---|
[백준/C++] 18110번: solved.ac (1) | 2024.06.04 |
[백준/C++] 28418번: 회장님께 바치는 합성함수 (3) | 2024.05.16 |
[백준/C++] 5618번: 공약수 (0) | 2024.04.21 |
[백준/C++] 14651번: 걷다보니 신천역 삼 (Large) (2) | 2024.02.11 |