문제 URL:
4673번: 셀프 넘버
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,
www.acmicpc.net
다음 문제는 10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 문제로,
셀프 넘버의 정의는 위 링크 속 문제에 자세히 설명되어있다.
이 문제는 배열과 함수를 이용하여 풀었다.
먼저 non_self 함수를 만들고, non_self 함수를 통해 셀프 넘버가 아닌 숫자를 반환하여
main함수에서 이 숫자가 들어있는 배열의 값을 0으로 만들어주었다.
이 과정을 거치면 셀프 넘버가 아닌 숫자들의 값은 모두 0이 되므로,
값이 0이 아닌 배열의 값들을 출력해주면 결과와 같이 셀프 넘버만 화면에 나타나게 된다.
#include<iostream>
using namespace std;
int non_self(int num)
{
int n = num, x;
while(n!=0)
{
x = n%10;
n = n/10;
num += x;
}
return num;
}
int main()
{
int list[10000];
int num;
for(int i=0; i<10000; i++)
list[i] = i+1;
for(int i=0; i<10000; i++)
{
num = non_self(i+1);
if(num<=10000)
list[num-1] = 0;
}
for(int i=0; i<10000; i++)
if(list[i]!=0)
cout << list[i] << '\n';
return 0;
}