팩토리얼 2

이윤설·2024년 3월 19일

제출코드(오답)

import java.io.*;
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int answer = factorial(n);
        System.out.println(answer);
    }

    static int factorial(int n) {
        if (n == 0) {
            return 1;
        } else {
            return n * factorial(n - 1);
        }
    }
}

n이 20이면 결과값이 음수가 나온다.
이는 int의 범위를 초과했기 때문이다.

제출코드(정답)

import java.io.*;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        
        long answer = factorial(n);
        System.out.println(answer);
    }

    static long factorial(long n) {
        if (n == 0) {
            return 1;
        } else {
            return n * factorial(n - 1);
        }
    }
}

자료형을 long으로 바꾸었더니 통과가 되었다.

배운점

  1. 만약 int 연산의 결과가 음수로 나온다면, 이는 범위를 초과한 것이므로 자료형을 long으로 바꾸어 연산을 하자.
  2. 만약 long 연산도 결과가 음수로 나온다면, BigInteger로 바꿔서 계산하자.
profile
화려한 외면이 아닌 단단한 내면

0개의 댓글