백준 Baekjoon

[C언어] 백준 6378 : 디지털 루트

sujo 2020. 7. 21. 11:22

백준 6378 : 디지털 루트

 

문제 링크

https://www.acmicpc.net/problem/6378

 

6378번: 디지털 루트

문제 양의 정수 N의 디지털 루트를 구하려면 N을 이루고 있는 모든 자리수를 더해야 한다. 이때, 더한 값이 한 자리 숫자라면, 그 수가 N의 디지털 루트가 된다. 두 자리 이상 숫자인 경우에는 다��

www.acmicpc.net

 

 

문제 내용

(요약)양의 정수 N의 디지털 루트를 구하려면 N을 이루고 있는 모든 자리수를 더해야 한다. 이때, 더한 값이 한 자리 숫자라면, 그 수가 N의 디지털 루트가 된다. 두 자리 이상 숫자인 경우에는 다시 그 수를 이루고 있는 모든 자리수를 더해야하며, 한 자리 숫자가 될 때 까지 반복한다.

양의 정수 N이 주어졌을 때, 그 수의 디지털 루트를 구하는 프로그램을 작성하시오.

단, 수는 최대 1000자리이다.

ex) 24 → 6, 39 → 3

 

 

Idea

N값의 범위가 1000까지가 아닌 1000의 자리수 임에 유의하자.

범위가 큰 수이므로 먼저 문자열로 받아 처리한 후 디지털 루트를 구하는 방법을 사용하였다.

 

각 자리수를 모두 더하여 10이하의 숫자를 만드는 것이 목표이므로,

1의 자리수만을 분리하여 남은 숫자들과 계속 더해주었다.

ex) 375 → 37 + 5 = 42 → 4 + 2 = 6

 

 

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
 
int main() {
    char N[1001];
    int root;
    while (1) {
        root = 0;
        scanf("%s", N);
        if (strcmp(N, "0"== 0break;
        //입력받은 숫자의 각 자리수를 모두 더함
        for (int i = 0; i < strlen(N); i++) {
            root += N[i] - '0';
        }
        //디지털 루트 구하기
        while (root >= 10) {
            root = root / 10 + root % 10;
        }
        printf("%d\n", root);
    }
    return 0;
}
cs