완전수
2024. 11. 28. 14:16ㆍ정보처리,전산/Clang
반응형
#include <stdio.h>
int complete(int n) {
int sum = 0;
for (int j = 1; j <= n / 2; j++) { // 약수는 n의 절반을 넘지 않음
if (n % j == 0) {
sum += j; // 약수들의 합 계산
}
}
return (sum == n); // 약수의 합이 원래 숫자와 같으면 완전수
}
int main() {
int s = 0;
for (int i = 1; i <= 100; i++) {
if (complete(i)) { // 완전수인지 확인
s += i; // 완전수라면 합산
}
}
printf("완전수의 합: %d\n", s); // 결과 출력
return 0;
}
코드 해석 (순서대로)
1. complete(int n) 함수
- 입력된 정수 n이 완전수(perfect number)인지 확인하는 함수.
- 완전수란 자기 자신을 제외한 약수의 합이 자기 자신과 같은 수를 의미함.
- 로직:
- sum 변수를 0으로 초기화.
- 1부터 n / 2까지 반복하며, n의 약수(j)를 찾음.
- 약수를 찾으면 그 값을 sum에 누적.
- sum과 n이 같으면 1(참)을 반환, 그렇지 않으면 0(거짓)을 반환.
2. main() 함수
- 1부터 100까지 숫자 중에서 완전수를 찾아 합산.
- 로직:
- 변수 s를 0으로 초기화.
- i를 1부터 100까지 증가시키며 반복:
- complete(i)를 호출해 i가 완전수인지 확인.
- 완전수라면 s에 더함.
- 반복 종료 후, 완전수의 총합을 출력.
코드 실행 흐름
- complete() 함수: 특정 숫자 i가 완전수인지 판단.
- , complete(6) 호출 시:
- 6의 약수: 1, 2, 3 → 합 = 6 → 반환값 1.
- complete(10) 호출 시:
- 10의 약수: 1, 2, 5 → 합 = 8 → 반환값 0.
- , complete(6) 호출 시:
- main() 함수: 1~100의 완전수를 찾아 합산.
- 1부터 100까지의 숫자를 하나씩 complete()로 확인.
- 완전수로 확인된 숫자는 s에 누적:
- 예: 6, 28 등이 완전수 → 결과적으로 s = 6 + 28 = 34.
- 결과적으로 출력: "완전수의 합: 34".
반응형
'정보처리,전산 > Clang' 카테고리의 다른 글
포인터와 배열 접근 (0) | 2024.11.28 |
---|---|
문자열 포인터 (0) | 2024.11.28 |
실제 코드 내에서 malloc을 호출하기 때문에 메모리를 힙에 저장한다 (0) | 2024.08.10 |
변수의 범위(scope) (0) | 2024.07.26 |
포인터 배열 , 배열 포인터 (1) | 2024.07.24 |