0보다 크거나 같은 정수 N이 주어진다. 이때,
N!
을 출력하는 프로그램을 작성하시오.
첫째 줄에 정수 N(0 ≤ N ≤ 12)이 주어진다.
첫째 줄에
N!
을 출력한다.
✅ n 팩토리얼 (
n!
)이란n * (n-1) * (n-2) * ... * 1
이므로 for문을 통해 1부터 n까지 곱해주면 되는 간단한 문제!
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int result = 1;
if(n == 0) {
bw.write(result + ""); bw.close();
return;
}
for(int i=2;i<=n;i++)
result *= i;
bw.write(result + "");
br.close();
bw.close();
}
}
(아래 : for문 / 위 : 재귀 함수) : 재귀함수 코드는 아래 문제에서도 사용함!
0보다 크거나 같은 정수 N이 주어진다. 이때,
N!
을 출력하는 프로그램을 작성하시오.
첫째 줄에 정수 N(0 ≤ N ≤ 20)이 주어진다.
첫째 줄에
N!
을 출력한다.
✅ for문 대신 재귀 함수를 사용하여 팩토리얼을 구현할 수 있다!
메서드factorial(int)
는 입력받은n
과factorial(n-1)
을 호출하여 곱하고,factorial(n-1)
은 입력받은n-1
과factorial(n-2)
를 호출하여 곱한다. 이 과정을 계속 반복하다가 호출된 함수가factorial(1)
이 되면1
을 반환하여 순서대로 거슬러 올라가 최종 값을 구할 수 있다.n
이0
인 경우 역시 재귀 함수를 호출하지 않고 바로1
을 반환하면 된다.
위 문제와 달리n
의 범위가20
까지인데,20!
은2,432,902,008,176,640,000
으로 int형 범위를 초과하므로 결과를 long 타입으로 반환해야 한다!
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
bw.write(factorial(n) + "");
br.close();
bw.close();
}
static long factorial(int n) {
if(n <= 1) return 1;
return n * factorial(n-1);
}
}