https://www.acmicpc.net/problem/6679
수의 본질에 대해 조금 생각하게 해준 문제였다.
일상 생활에서 쓰는 수 표현 방법은 십진법이다.
십진법은 수라는 물리량을 10개의 숫자로 표현하는 방법이다.
16진법은 수를 표현하기 위해 숫자 16개를 사용했을 뿐이다.
몇 개의 숫자로 수를 표현하든 수의 크기는 변하지 않는다.
예를들어 십진법으로 표현된 30을 생각해보자.
30은 16진법으로 표현했을 때 1E이다.
1E를 10으로 나눈 나머지의 크기는 10진법으로 표현하든 16진법으로 표현하든 크기는 다르지 않다.
10진법으로 표현된 수의 각 자릿수를 구하기 위해 몫을 10으로 반복적으로 나눈다.
12, 16진법도 각 자릿수를 구하기 위해 12,16을 반복적으로 나눈다.
그리고 10,12,16으로 나누었을 때 나머지의 합이 서로 같은 경우에 그 수를 출력하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include<stdio.h> typedef enum _BOOL { TRUE = 1, FALSE = 0 }BOOL; int main() { int sum[3]; int divisor[3] = { 10,12,16 }; int temp; BOOL isSame = TRUE; for (int i = 1000; i < 10000;i++) { for (int j = 0; j < 3; j++) sum[j] = 0; for (int j = 0; j < 3;j++) { temp = i; while (temp > 0) { sum[j] += temp%divisor[j]; temp /= divisor[j]; } if (j >= 1 && sum[j] != sum[j-1]) { isSame = FALSE; break; } } if (isSame) printf("%d\n",i); isSame = TRUE; } return 0; } | cs |
'백준' 카테고리의 다른 글
2991)사나운 개 (0) | 2019.02.24 |
---|---|
2210)숫자판 점프 (0) | 2019.02.23 |
2740)행렬 곱셈 (0) | 2019.02.21 |
2312)수 복원하기 (0) | 2019.02.21 |
2667)단지 번호 붙이기 (0) | 2019.02.20 |