[문제] 완전수는 자기 자신을 제외한 양의 약수를 더했을 때 자기 자신이 되는 양의 정수를 말한다.
대표적인 완전수는 6, 28, 496등이다.
ex) 6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
496 = 1+ 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248
양의 정수를 입력받은 후 해당 정수가 완전수 인지를 판단하는 프로그램을 작성하시오.
[프로그램 내에 반드시 포함되어야 하는 사용자정의 함수]
- int testPetfect(int *) : 정수 포인터를 입력받아 해당 정수가 완전수 인지의 여부에 따라 만약 완전수이면 1을, 그렇지 않으면 0을 반환한다.
- void printFactors(int *) : 정수 포인터를 입력받아 입력된 수가 완전수이면 입력받은 수를 제외한 모든 약수를 출력하는 기능을 수행한다.
예를들어 입력받은 수가 6이라면 이 수는 완전수이다. 따라서 6일 제외한 1,2,3을 화면에 출력한다.
#include <stdio.h>
#pragma warning(disable:4996) //scanf오류 방지 코드
int testPerfect(int*);
void printFactors(int *);
int main() {
int num = 0, perfectNum = 0,numCheck;
for (;;) { //0이하면 다시 입력받는 코드
printf("How many numbers would you like to test? ");
scanf("%d", &num);
if (num > 0) break;
}
printf("\n");
for (int i = 0; i < num; i++) {
printf("Please enter a possible perfect number: ");
getchar();
scanf("%d", &perfectNum);
numCheck = testPerfect(&perfectNum);
printf("%d:", perfectNum);
if (numCheck == 1&& (perfectNum!=0)) printFactors(&perfectNum); //완전수일때
else printf("NOT PERFECT");
printf("\n\n");
}
return 0;
}
int testPerfect(int* num) {
int sum = 0;
for (int i = (*num); i > 0; i--) {
if (((*num)%i) == 0) {
if (i == *num) continue; //본인일때 건너뜀
sum += i;
}
}
if (*num == sum) return 1;
else return 0;
}
void printFactors(int *num) {
for (int i = (*num); i > 0; i--) {
if (((*num) % i) == 0) {
if (i == *num) continue;
printf("%d ", i);
}
}
}
'PROGRAMMING CODE > C' 카테고리의 다른 글
[SOLUTION] 흐르는 물 (0) | 2021.10.18 |
---|---|
[SOLUTION] 회문 정수 판별 (0) | 2021.10.18 |
[SOLUTION] 행렬의 덧셈 뺄셈 (0) | 2021.10.18 |
[BAEKJOON] No.14681 C언어 (0) | 2021.10.18 |
[BAEKJOON] No.11022 C언어 (0) | 2021.10.18 |