Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

배열의 모든 완전제곱수 요소의 합을 구하는 C 프로그램

문제

이번 글에서는 배열에 포함된 완전제곱수(perfect square) 요소들의 합을 구하는 C 프로그램을 작성해 보겠습니다.

배열의 요소 개수를 입력받은 뒤, 그 요소들 중 완전제곱수에 해당하는 값들을 모두 찾아 더한 합계를 출력하는 것이 목표입니다.

해결 방법

먼저 예시를 통해 문제를 이해해 보겠습니다.

입력 = 1, 2, 3, 4, 5, 9, 10, 11, 16
완전제곱수 = 1, 4, 9, 16
합 = 1 + 4 + 9 + 16 = 30
출력: 30

알고리즘

배열의 완전제곱수 요소들의 합을 구하려면 아래 알고리즘을 따르면 됩니다.

1단계 − 실행 시점에 배열의 요소 개수를 입력받습니다.

2단계 − 배열의 각 요소를 입력받습니다.

3단계 − 합계를 저장할 변수 sum을 선언하고 0으로 초기화합니다.

4단계 − 각 배열 요소가 완전제곱수인지 여부를 검사합니다.

5단계 − 해당 요소가 완전제곱수라면 sum = sum + number로 합계에 더합니다.

6단계 − 최종 합계 sum을 반환합니다.

핵심 로직 설명

완전제곱수 판별은 sqrt() 함수를 활용합니다. 숫자의 제곱근을 실수형(fVar)과 정수형(iVar)으로 각각 구한 뒤 두 값을 비교하여, 소수점 이하가 없이 일치하면 그 수는 완전제곱수입니다. 예를 들어 16의 제곱근은 4.0이므로 정수형 변환 후에도 4로 동일하지만, 10의 제곱근은 약 3.162이므로 정수 부분 3과 달라 완전제곱수가 아닙니다.

예제 코드

다음은 배열에서 완전제곱수 요소의 합을 구하는 전체 C 프로그램입니다.

#include<stdio.h>
#include<math.h>
int isPerfectSquare(int number){
   int iVar;
   float fVar;
   fVar=sqrt((double)number);
   iVar=fVar;
   if(iVar==fVar)
      return number;
   else
   return 0;
}
int main(){
   int n;
   printf("enter no: of elements:");
   scanf("%d",&n);
   int arr[n];
   int i;
   printf("enter the elements in an array:\n");
   for(i = 0; i < n; i++){
      scanf("%d",&arr[i]);
   }
   int sum = 0;
   for(i = 0; i < n; i++){
      sum = sum + isPerfectSquare(arr[i]);
   }
   printf("sum=%d",sum);
   return 0;
}

실행 결과

위 프로그램을 컴파일하여 실행하면 다음과 같은 결과를 확인할 수 있습니다.

실행 1:
enter no: of elements:5
enter the elements in an array:
1
3
5
9
10
sum=10

실행 2:
enter no: of elements:5
enter the elements in an array:
1
4
9
16
25
sum=55

첫 번째 실행에서는 1과 9만 완전제곱수이므로 합이 10이 되고, 두 번째 실행에서는 입력한 5개 값(1, 4, 9, 16, 25)이 모두 완전제곱수이므로 합이 55가 됩니다.