#팩토리얼 ## CODE <a class='btn btn-default' href='/codes/9041'>Link</a> ``` public class Factorial { public static void main(String[] args) { // 입력값 받기 int number = Integer.parseInt(args[0]); // 결과 출력 printFactorial(number); } // 정수 n을 입력받아 n!의 결과를 출력 public static void printFactorial(int n) { int result = 1; System.out.printf("%d! = ", n); for (int i = n; i > 0; i--) { System.out.printf("%d", i); result *= i; // 해당 라인을 수정하세요. if (i != 1) { System.out.printf(" x "); } } System.out.printf(" = %d\n", result); } } ``` ## INPUT ``` 50 ``` ## OUPUT ``` 50! = 50 x 49 x 48 x 47 x 46 x 45 x 44 x 43 x 42 x 41 x 40 x 39 x 38 x 37 x 36 x 35 x 34 x 33 x 32 x 31 x 30 x 29 x 28 x 27 x 26 x 25 x 24 x 23 x 22 x 21 x 20 x 19 x 18 x 17 x 16 x 15 x 14 x 13 x 12 x 11 x 10 x 9 x 8 x 7 x 6 x 5 x 4 x 3 x 2 x 1 = 0 ``` 입력값에 작은 수를 넣으면 제대로 출력이 되는데 10 단위씩 넣다 보면 음수가 출력되기도 하고 0이 출력되는 값도 있네요.. 결과값 변수 형을 바꿔줘도 마찬가지입니다. 그리고 printFactorial 메소드에서 결과값 변수 초기값을 1로 설정한 이유는 무엇입니까?
# 음수 또는 0이 나오는 이유 int형 변수의 표현 범위는 한정적입니다. 그런데 팩토리얼의 값이 너무 큰 경우, int 변수가 나타낼 수 있는 한계치를 넘어서게 되는데요. 이때 음수 또는 0이 나오게 됩니다. 이러한 현상을 **오버플로우**(overflow)라고 합니다. # 초기 값을 1로 잡은 이유 어떤 수를 곱했을 때 그대로 나오기 위해서입니다. (1은 곱셈의 항등원)
답변 감사합니당