백준

백준 2231 C++

solfa 2023. 11. 22. 18:35

https://www.acmicpc.net/problem/2231

 

2231번: 분해합

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

www.acmicpc.net

 

생각
1. 1부터 커지면서 분해합 비교 (최대 N까지 비교)
2. 하나하나 분해하는 방법을 어떻게 구현 할 것인가???

 2.1. N을 string으로 변환하여 하나씩 받아오기... 미친짓이다

 2.2. 10으로 나눠서 자리수 나누기!!! 아는 거 쓰자!

 

<자리수 분해하는 방법>

//i는 for문으로 1부터 커지도록 함
while(i != 0){
            sum += i % 10;
            i /= 10;
        }

 

 

 

정답 코드

#include <iostream>
using namespace std;

int main(){
    int N, ans = 0; // 만약 분해합이 없으면 0 출력을 하기위해 처음부터 0
    cin >> N;
    
    for(int i = 1 ; i < N ; i++){
        int sum = 0, temp = i; 
        while(temp != 0){
            sum += temp % 10;
            temp /= 10;
        }
        if (sum + i == N){  // sum은 only 자리수 합이니까 자리수 + i하는 거 잊지 말기!
            ans = i;
            break;
        }
    }
    cout << ans;
}

 

728x90

'백준' 카테고리의 다른 글

백준 15649 C++  (0) 2023.11.24
백준 9663 C++  (1) 2023.11.23
백준 7568 C++  (2) 2023.11.22
백준 1018 C++  (0) 2023.11.18
백준 9093 C++  (1) 2023.11.16