C#

C# 예제 - 팩토리얼 계산

옹즤 2025. 4. 8. 11:27
  • 사용자로부터 입력받은 숫자의 팩토리얼을 계산하는 프로그램 작성.

팩토리얼은 n!로 표현되며, n! = n × (n-1) × (n-2) × ... × 1
예를 들어, 5! = 5 × 4 × 3 × 2 × 1 = 120
for, while, do-while문 중 하나를 활용하여 해결해주세요. 
Console.ReadLind() 을 활용해서 출력 값을 출력해주세요. 

 

코드 작성 전 설계

1
2
3
4
5
6
7
// 사용자로부터 값 입력
 
// 입력된 수를 1씩 빼며 1이 될 때까지 모두 곱함
 
// 곱한 값을 출력
cs

 

 

코드 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
string console = Console.ReadLine();
int input;
input = Convert.ToInt32(console);
int fac = input;
 
for (int i = input; i > 0; i--)
{
    if (i > 0)
    {
        fac *= i;
    }
}
 
 
Console.WriteLine($"Enter a number: {console}");
Console.WriteLine($"Factorial of {console} is: {fac}");
cs

처음 작성한 코드는 다음과 같았다.

일단 바로 문제가 발생했는데 for문에서 기존에 설정된 fac값에 i에서 1을 빼기 전의 값을

한번 더 곱해준 후 시작이 되서 예상되는 값을 도출하지 못했다.

그래서 do-while문으로 바꿀까 했지만 for문으로 해결하고 싶었다.

 

해결 방법은 매우 간단했다.

int fac = 1; 로 바꾸면 의도한대로 코드가 작동했다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string console = Console.ReadLine();
int input;
input = Convert.ToInt32(console);
int fac = 1;
 
for (int i = input; i > 0; i--)
{
    if (i > 0)
    {
        fac *= i;
    }
}
 
Console.WriteLine($"Enter a number: {console}");
Console.WriteLine($"Factorial of {console} is: {fac}");
cs

문제 중 'Console.ReadLind() 을 활용해서 출력 값을 출력해주세요.' 라는 부분을

console 변수 선언 후 출력하면 되는 줄 알았는데 답지를 보니

Console.ReadLind() 자체를 자료형으로 바꿔 출력했다.

이후 Gpt에게 코드 리뷰를 받았다.

 

코드를 추가적으로 수정하면서 느꼈지만 안정적이고 깔끔한 코드의 느낌은 아니었다.

일단 콘솔에서 숫자가 아닌 문자만 입력해도 바로 예외 처리 에러가 발생했다.

1
2
3
4
5
6
7
8
9
10
11
12
string inputStr = Console.ReadLine();
int input;
int.TryParse(inputStr, out input);
int fac = 1;
 
for (int i = input; i > 0; i--)
{
    fac *= i;
}
 
Console.WriteLine($"Enter a number: {inputStr}");
Console.WriteLine($"Factorial of {inputStr} is: {fac}");
cs

최종 코드는 다음과 같이 수정했는데 예외 처리를 했다고 하지만 참/거짓까지 판별하는 조건은 넣지 않았다.

그렇기에 문자열을 입력하면 결과값이 좀 이상하게 출력되지만

문제에서 의도한대로의 코드는 잘 짰다고 생각한다.