본문 바로가기

백준

6679)싱기한 네 자리 숫자

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