본문 바로가기
쿤즈 Dev/C

[C언어 문제] Factorial(팩토리얼: 계승) 구하기 (반복문 이용)

by :)Koon 2021. 4. 17.

조건문을 이용해서 홀수 또는 짝수를 알아보는 프로그래밍을 지난 포스팅에서 해보았습니다. 필요한 내용들은 연산자를 사용하는 방법과 조건문을 사용하는 방법들이었어요.

이번에는 반복문을 사용해서 수학에서 배우는 Factorial을 계산하는 프로그래밍을 해보도록 하겠습니다.


C언어 문제. 자연수를 입력받아 Factorial을 구하시오.

화면에 다음과 같이 출력되도록 프로그래밍하시오.

양의 정수를 입력하세요 : -1
양의 정수가 아닙니다.
양의 정수를 입력하세요 : 5
5! = 120

 

조건 1. 양의 정수(자연수)를 입력받도록 합니다. 양의 정수가 아닐 경우 다시 입력받습니다.

조건 2. 반복문을 이용하세요.(for, while, do... while)

 

*프로그래밍 의도

정수형 변수를 선언할 수 있는가?

연산자를 사용할 수 있는가?

반복문을 사용할 수 있는가?

조건문을 사용할 수 있는가?

 

*문제 해결을 위한 글

2020.08.04 - [쿤즈 Dev/C] - [C언어] 데이터 타입(Data Types) 과 함께 변수 선언하기

2020.08.07 - [쿤즈 Dev/C] - [C언어] 연산자의 종류에 대해서 알아보자

2020.08.10 - [쿤즈 Dev/C] - [C언어] 조건문을 사용해서 분기시켜보자(1) - if 조건문!

2020.08.25 - [쿤즈 Dev/C] - [C언어] 반복문의 시작! - for 구문

2020.09.14 - [쿤즈 Dev/C] - [C언어] 반복문 두 번째 - while 구문

2020.09.15 - [쿤즈 Dev/C] - [C언어] 반복문 세 번째 - do while


C언어 문제 풀이

작성된 프로그래밍은 정답이 아닙니다. 프로그래밍 소스에 대해 정답은 없습니다. 다양한 방법으로 프로그래밍이 가능하며 한 가지 예일 뿐입니다.

소스코드 1. factorial.c

#include <stdio.h>

int factorial(int);

int main() {
    int num;
    
    while(1) {
        printf("양의 정수를 입력하세요 : ");
        scanf("%d", &num);
        
        if(num <= 0) {
            printf("양의 정수가 아닙니다.\n");
            continue;
        }
        
        printf("%d! = %d\n", num, factorial(num));
        break;
    }
    return 0;
}

int factorial(int num) {
    int i;
    int ret = 1;
    
    for(i=num; i>0; i--) {
        ret *= i;
    }
    
    return ret;
}

 

* 프로그래밍 의도 파악

우선 Factorial에 대해서 알아야 합니다. Factorial은 어떤 수보다 작거나 같은 모든 양의 정수의 곱을 말합니다. 이를 이용해서 결과를 낼 수 있습니다.

 

정수형 변수를 선언할 수 있는가?

정수형 변수의 선언이 필요합니다. 정수형 변수는 int로 선언하고 이 변수는 키보드로부터 값을 입력받아 저장하는 용도로 사용할 수 있습니다.

 

연산자를 사용할 수 있는가?

사용해야 할 연산자는 대입 연산자, 산술 연산자, 증감 연산자, 비교 연산자들이 있습니다. 다양한 연산자들을 사용할 수 있어야 문제 해결이 가능합니다. 우선 반복문 for에서 적용해야 할 연산자들이 많죠.

 

반복문을 사용할 수 있는가?

반복문은 두 가지를 사용했습니다. 전체적으로 음수인지 양수인지를 판별하기 위해서 무한반복을 진행했고, 양수가 들어왔을 때에는 정상적으로 반복문이 종료 되도록 했습니다.

 

두 번째 반복문은 factorial()이라는 사용자 정의 함수를 만들고 이 내부에서 값을 계산하도록 했습니다. return value가 정수이기 때문에 내부에서 결과를 저장하는 변수 ret도 정수로 선언하였습니다.

 

조건문을 사용할 수 있는가?

조건문은 무한 반복문인 while 내부에서 선언하였습니다. 음수의 경우는 factorial을 계산하지 않도록 하기 위해서 사용자로부터 입력받은 값이 양수인지 음수인지 0인지를 판단하도록 합니다.


이번 포스팅에서는 반복문과 조건문을 사용하고 가능하다면 사용자 정의 함수까지 사용해서 Factorial이라는 값을 계산해 보았습니다. 사실 Factorial은 반복문 대신 재귀 함수로도 값을 계산할 수 있으니 그 부분도 직접 해보시면 도움이 많이 되실 것 같아요. 도움이 되셨으면 합니다. 이상입니다.

댓글