728x90
브루트 포스 문제입니다.
자연수 N이 주어졌을 때, 가장 작은 생성자를 구하는 문제입니다.
생성자는 X + (X의 요소들 각각을 더한 수) = N 인것 입니다.
예를들면
168의 경우
= 156 + 1 + 5 + 6
로 만들 수 있습니다.
여기서 168의 생성자는 156입니다. (1 + 5 + 6은 156의 각각 숫자의 합입니다.)
1부터 시작하여 각 수와, 수의 각 자리수를 전부 더한 값이 N과 같은지 비교하여
같으면 그 생성자를 출력하고, 없으면 0을 출력하게 하였습니다.
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
int num;
int sum;
int part;
cin >> num;
for (int i = 1; i < num; ++i) {
sum = i;
part = i;
while (part) {
sum += part % 10;
part /= 10;
}
if (num == sum) {
cout << i << endl;
return 0;
}
}
cout << "0" << endl;
return 0;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 1018번 체스판 다시 칠하기 (0) | 2019.09.02 |
---|---|
[C++] 백준 7568번 덩치 (0) | 2019.09.02 |
[C++] 백준 2798번 블랙잭 (0) | 2019.09.01 |
[C++] 백준 1002번 터렛 (0) | 2019.08.31 |
[C++] 백준 3053번 택시 기하학 (0) | 2019.08.31 |