백준 6378 : 디지털 루트
문제 링크
https://www.acmicpc.net/problem/6378
문제 내용
(요약)양의 정수 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") == 0) break;
//입력받은 숫자의 각 자리수를 모두 더함
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 |
'백준 Baekjoon' 카테고리의 다른 글
[C언어] 백준 2902 : KMP는 왜 KMP일까? (0) | 2020.07.22 |
---|---|
[C언어] 백준 2822 : 점수 계산 (0) | 2020.07.21 |
[C언어] 백준 4659 : 비밀번호 발음하기 (0) | 2020.07.21 |
[C언어] 백준 9557 : Arabic and English (0) | 2020.07.20 |
[C언어] 백준 1003 : 피보나치 함수 (0) | 2020.07.20 |