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 |