문제
싱기한 네자리 숫자란, [1000,9999]인 10진수 숫자중에서, 다음의 조건을 만족하는 숫자를 말한다.
- 숫자를 10진수, 12진수, 16진수로 나타낸 다음, 각각의 숫자에 대해, 각 숫자의 자리수를 더했을 때, 세 값이 모두 같아야 한다.
여러분은 싱기한 네자리 숫자를 모두 출력해야 한다.
입력
입력은 주어지지 않는다.
출력
싱기한 네자리 숫자를 오름차순으로 한줄에 하나씩 출력한다.
풀이
10진법의 수 N을 x진법의 수로 나타내기 위해서는, N을 x로 나눴을 때의 나머지를 쭉 적다가 x보다 작아졌을 때 모두 합쳐서 적으면 된다.
예를 들어 문제의 2992를 12진법으로 변환할 때는 다음과 같이 연산을 수행하면 된다.
이처럼 수를 각각 10진수, 12진수, 16진수로 변환했을 때의 자리 수의 합이 같은 경우 출력을 하면 된다.
제일 작은 싱기한 네자리 숫자는 2992이니까 거기서부터 for문을 돌면 된다.
코드
더보기
#include <iostream>
using namespace std;
int to_10(int num);
int to_12(int num);
int to_16(int num);
int main() {
for (int i = 2992; i <= 9999; i++) {
if (to_10(i) == to_12(i) && to_12(i) == to_16(i))
printf("%d\n", i);
}
}
int to_10(int num) {
int res = 0;
while (num >= 10) {
res += num % 10;
num /= 10;
}
res += num % 10;
return res;
}
int to_12(int num) {
int res = 0;
while (num >= 12) {
res += num % 12;
num /= 12;
}
res += num % 12;
return res;
}
int to_16(int num) {
int res = 0;
while (num >= 16) {
res += num % 16;
num /= 16;
}
res += num % 16;
return res;
}
'Old > 백준' 카테고리의 다른 글
백준 15685번 드래곤 커브 // C++ (0) | 2020.02.17 |
---|---|
백준 6603번 로또 // C++ (0) | 2020.02.17 |
백준 4690번 완전 세제곱 // C++ (0) | 2020.02.17 |
백준 1620번 나는야 포켓몬 마스터 이다솜 // C++ (0) | 2020.02.16 |
백준 1764번 듣보잡 // C++ (0) | 2020.02.16 |