📄문제
자연수 N이 주어지면 자연수 N의 진약수의 합을 수식과 함께 출력하는 프로그램을 작성하시오.
ℹ️ 조건
3 < N <= 100
⬇️ 입력
첫 줄에 자연수 N을 입력한다.
[20]
⬆️ 출력
줄에 더하는 수식과 함께 합을 출력한다.
[1 + 2 + 4 + 5 + 10 = 22]
📝 풀이
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int N; // 입력값
int sum = 0; // 총 합
queue<int> properDivisors; // 진약수 큐
scanf_s("%d", &N);
for (int i = 1; i <= N / 2; ++i)
if (N % i == 0)
{
properDivisors.push(i);
sum += i;
}
// 마지막 값을 제외하고 + 포맷으로 출력
while (properDivisors.size() > 1)
{
printf("%d + ", properDivisors.front());
properDivisors.pop();
}
// 마지막 값은 = 포맷과 총 합 출력
printf("%d = %d", properDivisors.front(), sum);
properDivisors.pop();
}
- queue를 사용하여 1부터 반복하여 0으로 나누어 떨어진 i를 삽입합니다.
- A + B ... = C 포맷을 충족하기 위해 queue의 마지막 값을 제외한 모든 값을 + 포맷으로 출력합니다.
- queue의 값 마지막을 출력한 후 = sum을 출력하여 마무리합니다.
#include <iostream>
int main()
{
int N; // 입력값
int sum = 1; // 총 합
scanf_s("%d", &N);
printf("%d", 1);
for (int i = 2; i <= N / 2; ++i)
if (N % i == 0)
{
printf(" + %d", i);
sum += i;
}
printf(" = %d", sum);
}
- 더욱 단순한 풀이로, 진약수에는 1이 포함되기에 1은 출력을 한 채 포맷의 표현 순서를 +가 먼저 나오게 한 후 마지막 진약수까지 출력하게 합니다.
- 그 후에, = sum을 출력하여 마무리 짓습니다.
'algorithms (C++)' 카테고리의 다른 글
[C++] 숫자만 추출 (0) | 2023.10.13 |
---|---|
[C++] 나이 구하기 (0) | 2023.10.13 |
[C++] 자연수의 합 (0) | 2023.09.27 |
[C++] 1부터 N까지 M의 배수합 (0) | 2023.09.27 |
[C++] 선택정렬 (0) | 2022.11.10 |