< [C++/백준 2231번] 분해합

프로그래밍 공부/백준 (C++)

[C++/백준 2231번] 분해합

Rocketbabydolls 2023. 8. 3. 20:28
 

2231번: 분해합

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이

www.acmicpc.net

 

해결방법

   처음부터 모든 경우를 다 시행해 본다. 

 

매번 자릿수를 구해주어 최소의 부분합을 구해 입력한 숫자와 맞는지 계속 검사한다. 

 

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{

    int N;


    cin >> N;

    int digit = 0;
   
    int ans = 1;
    int tmp = ans;
    ans = 1;

    while (ans < N)
    {
        digit = 0;
        int i = 0;
        int sum = 0;
        tmp = ans;

        while (tmp > 0)
        {
            tmp /= 10;
            digit++;
        }

        tmp = ans;

        while (i < digit)
        {
            sum += tmp % 10;
            
            tmp /= 10;
            i++;
        }
      
        if (sum + ans == N)
        {
            cout << ans;
           return 0;
        }

        ans++;



    }
    cout << 0;



    return 0;
 }