내가 생각했을때 문제에서 원하는부분
0보다 크거나 같은 정수 N이 주어진다.
이때, N!을 출력하는 프로그램을 작성하시오.
첫째 줄에 정수 N(0 ≤ N ≤ 100,000)이 주어진다.
내가 이 문제를 보고 생각해본 부분
multiplyRange 함수: 이 함수는 low부터 high까지의 모든 정수를 곱한 결과를 BigInteger로 반환하는 재귀 함수이다.
low > high인 경우는 빈 범위이므로 곱셈 결과인 BigInteger.ONE을 반환한다.
low == high인 경우는 범위에 숫자가 하나만 있으므로 해당 숫자를 BigInteger.valueOf(low)로 변환하여 반환한다.
그 외의 경우, 범위를 중간(mid)으로 나누어 low부터 mid까지의 곱과 mid + 1부터 high까지의 곱을 재귀적으로 계산한 후, 두 결과를 multiply() 메소드를 사용하여 곱한다.
main 함수:
BufferedReader로 정수 N을 입력받는다.
N이 0이면 0!은 1이므로 BigInteger.ONE을 출력한다.
N이 0보다 크면 multiplyRange(1, n) 함수를 호출하여 1부터 N까지의 곱, 즉 N!을 계산하고 그 결과를 출력한다.
BufferedReader 자원을 닫는다.
코드로 구현
package baekjoon.baekjoon_28;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
// 백준 27434번 문제
public class Main1012 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
if(N == 0) {
System.out.println(BigInteger.ONE);
} else {
BigInteger result = multiplyRange(1, N);
System.out.println(result);
}
br.close();
}
private static BigInteger multiplyRange(int low, int high) {
if(low > high) {
return BigInteger.ONE;
}
if(low == high) {
return BigInteger.valueOf(low);
}
int mid = low + (high - low) / 2;
return multiplyRange(low, mid).multiply(multiplyRange(mid + 1, high));
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.