[문제] https://www.acmicpc.net/problem/4673
4673번: 셀프 넘버
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,
www.acmicpc.net
[풀이]
1. 길이 10000짜리 배열을 선언하고 모든 값을 0으로 초기화 시켜준다.
2. 셀프넘버의 생성자는 셀프넘버보다 클 수 없기 때문에 10000까지의 수를 생성자로 취급하고, 이 생성자가 만들어낸 번호가 10000보다 작으면 해당 칸의 값을 1로 변경한다.
3. 배열을 한 번 훑어서 내부 값이 0이라면 출력한다.
(전체 코드)
#include <iostream> using namespace std; #define SIZE 10001 int ten(int); int hun(int); int thou(int); int main() { int num[SIZE] = { 0, }; int self = 0; for (int i = 1; i < SIZE; i++) { self = i + (i%10) + ten(i) + hun(i) + thou(i); if(self < SIZE) num[self] = 1; self = 0; } for (int i = 1; i < SIZE; i++) { if (num[i] == 0) cout << i << endl; } return 0; } int ten(int n) { return (n % 100) / 10; } int hun(int n) { return (n % 1000) / 100; } int thou(int n) { return n / 1000; }
셀프넘버를 모두 수식으로 만들기엔 복잡하니, 각 자리 수의 숫자를 출력하는 함수를 만든다. 일의 자리 수는 10으로 나머지 연산을 하면 되니 따로 만들어 주지 않았다.
[백준] 1449번 수리공 항승 (c++) (0) | 2021.07.10 |
---|---|
[백준] 1157번 단어 공부 (c++) (0) | 2021.07.07 |
[백준] 1712번 손익분기점 (c++) (0) | 2021.07.05 |
[백준] 1110번 더하기 사이클(c++) (0) | 2021.07.04 |
[백준] 10818번 최소, 최대 (c++) (0) | 2021.07.04 |
댓글 영역