본문 바로가기
코딩테스트/programming_C++

baekjoon #4673_셀프넘버_c++

by prometedor 2021. 10. 25.
#include<iostream>

bool arr[10001]; //arr[1~10000]까지 이므로 배열의 크기는 10001

// 셀프넘버 판별함수
int d(int n) {  
int sum = n;  // 자기 자신을 첫 값으로 더해줌

while (n != 0) { // 0이 아닐 때 까지 반복
sum += n % 10;
n = n / 10;
}
return sum;
}

int main() {
for (int i = 1; i < 10001; i ++) {
int idx = d(i);

if (idx < 10001) {
arr[idx] = true;  // 셀프넘버가 아닌 수를 true로 만들어줌
}
}

// 셀프넘버인 수 출력
for (int i = 1; i < 10001; i++) {
if(!arr[i]) {
std::cout << i << "\n";
}
}
}

 

ex) n = 1234

sum += n % 10 n = n / 10;
sum += 1234 % 10 = 1234 + 4 = 1238 n = 1234 /10 = 123
sum += 123 % 10 = 1238 + 3 = 1241 n = 123 / 10 = 12
sum += 12 % 10 = 1241 + 2 = 1243 n = 12 / 10 = 1
sum += 1 % 10 = 1243 + 1 = 1244 n = 1 / 10 = 0

1244는 셀프넘버가 아니므로 arr[1244] 는 true

-> if(!arr[1244])에서 if 안에 값이 false이므로 출력이 일어나지 않음

'코딩테스트 > programming_C++' 카테고리의 다른 글

baekjoon #11720_숫자의 합_c++  (0) 2021.10.25
baekjoon #1065_한수_c++  (0) 2021.10.25
baekjoon #15596_정수 N개의 합_c++  (0) 2021.10.25
baekjoon #4344_평균은 넘겠지_c+  (0) 2021.10.25
baekjoon #8958_OX퀴즈_c++  (0) 2021.10.25