본문 바로가기
Study (etc)/C

[반복문] 팩토리얼 (계승) 구하기

by Haren 2019. 1. 7.

처음 해보는 프로그래밍 공부 포스팅인 것 같다.

아무래도 공적인 느낌보다는 개인적인 성취를 위해 작성하는만큼 경어를 사용하지 않으려고 한다.

또한 같은 이유로 보통 C언어를 공부하는 순서대로의 포스팅이 안 될 수도 있다.


처음으로 포스팅 해 볼 오늘의 성취는 for문을 이용한 팩토리얼, 그러니까 계승의 출력이다.

고등학교 수학 '확률과 통계'에서 쉽게 접해본 경험이 있을 것이다.


팩토리얼이란 n이란 수부터 1까지 곱해나가는 것을 말하며 !으로 표현한다.

즉, n!은 n 팩토리얼 또는 n의 계승이라고 읽으며 n × (n-1) × (n-2) × ... 3 × 2 × 1 의 느낌으로 계산한다.

이 팩토리얼, 계승이라는 녀석은 반복문의 예제로 굉장히 많이 사랑받고 있는 것 같다.


사용중인 교재는 오렌지 미디어 출판사에서 나온 '윤성우의 열혈 C 프로그래밍' 교재이다. 

그 교재에 문제로 수록되어 있던 것으로 직접 과제 해결을 위해 작성한 코드임을 미리 밝힌다.


#소스코드

#include<stdio.h>

int main(void)
{
    int num=0,total=1;
    
    printf("정수 입력 : ");
    scanf_s("%d",&num);

    for(int i=0;i<=num+1;i++)
    {
        total*=num;
        num--;
    }

    printf("정수의 팩토리얼(계승) : %d \n",total);

    return 0;
}

코드를 작성하고 나서야 느낀 점인데, for문에서 int i를 0으로 초기화 하지 않고 1로 초기화하여 조건식에서 i<=num+1을 i<=num으로 설정할 수도 있었겠다는 아쉬운 점이 남는다.


for문을 위한 정수형 i 변수가 num+1보다 작거나 같으면 for문 중괄호 안의 total*=num의 대입연산을 실행한 뒤 num에 저장된 수를 감소시켜 (n-1)의 느낌으로 만들었다. 


일단은 for문으로 만들었지만 추후에 while문 혹은 do~while문 등 타 반복문으로도 바꿔 만들어 올려보도록 하겠다.



도움이 필요한 분께는 도움이 되었으면 좋겠고, 혹시라도 제가 성장하는데 도움이 되어주실 수 있으신 분께서는 따뜻한 조언 한마디씩 부탁드립니다.