[C언어 코드업 문제풀이] CodeUp 1615 : 셀프 넘버(Self-Number)
ET의 공부/C언어 연습문제[ 코드업 ]2020. 7. 9. 07:42
코드업 1615번 셀프 넘버 문제풀이 해답입니다.
1. 문제 설명
어떤 자연수 n이 있을 때, d(n)을 n의 각 자릿수 숫자들과 n 자신을 더한 숫자라고 정의하자.
예를 들어 d(91) = 9 + 1 + 91 = 101 이 때, n을 d(n)의 제네레이터(generator)라고 한다.
위의 예에서 91은 101의 제네레이터이다.
어떤 숫자들은 하나 이상의 제네레이터를 가지고 있는데, 101의 제네레이터는 91 뿐 아니라 100도 있다.
그런데 반대로, 제네레이터가 없는 숫자들도 있으며, 이런 숫자를 인도의 수학자 Kaprekar가 셀프 넘버(self-number)라 이름 붙였다.
예를 들어 1,3,5,7,9,20,31 은 셀프 넘버 들이다.
시작 값(a)과 마지막 값(b)가 입력되면 두 수 사이의 셀프 넘버들의 합을 출력하시오.
2. 입력
시작 값(a)과 마지막 값(b)이 공백으로 분리되어 입력된다.( 1 <= a <= b <= 5,000)
3. 출력
두 수사이의 셀프넘버들의 합을 출력한다.
4. 입력 예시
1 10
5. 출력 예시
25
1부터 10사이의 셀프 넘버는 1, 3, 5, 7, 9이다.
따라서 합은 25
6. 문제 풀이
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
35
|
#include "stdio.h"
#include "stdbool.h"
bool arr[5001];
int self(int n) {
int sum = n;
while (1) {
if (n == 0) { break; }
sum += n % 10;
n = n / 10;
}
return sum;
}
int main() {
int i, j;
scanf("%d %d", &i, &j);
for (int k = 1; k <= 5000; k++) {
int index = self(k);
if (index <= j) {
arr[index] = true;
}
}
int result = 0;
for (int k = i; k <= j; k++) {
if (!arr[k]) { result += k;
}
}
printf("%d", result);
}
|
'ET의 공부 > C언어 연습문제[ 코드업 ]' 카테고리의 다른 글
[C언어 코드업 문제풀이] CodeUp 1441 : 버블 정렬 (0) | 2020.07.10 |
---|---|
[C언어 코드업 문제풀이] CodeUp 1620 : 자릿수의 합 (0) | 2020.07.09 |
[C언어 코드업 문제풀이] CodeUp 1610 : 서브 스트링 (2) | 2020.07.09 |
[C언어 코드업 문제풀이] CodeUp 1602 : 절대값 함수 (0) | 2020.07.09 |
[C언어 코드업 문제풀이] CodeUp 1581 : (함수 작성+포인터) swap 함수 만들기 (Call by Reference) (0) | 2020.07.09 |
댓글()