안녕하세요, 작가 J입니다. 오늘은 마지막 문제로 1보다 큰 정수 N을 입력하여 N! 값을 구하는 프로그램을 작성해 보겠습니다. 팩토리얼은 주어진 수보다 작거나 같은 모든 양의 정수의 곱을 의미합니다.
[Java Festival 31] 팩토리얼 계산하기
1보다 큰 정수(N)를 입력하여 N! 값을 구하시오.
* 팩토리얼이란 N의 수보다 작거나 같은 모든 양의 정수의 곱
ex) 3! = 1 * 2 * 3 => 6
코드 풀이 1: 배열을 사용한 방식
package Ex;
import java.util.Scanner;
public class Ex31 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("입력 : ");
int n = sc.nextInt();
int[] factorial = new int[n]; // 팩토리얼을 저장할 배열
int sum = 1; // 팩토리얼 계산 결과를 저장할 변수
// 팩토리얼 계산
for (int i = 1; i <= n; i++) {
factorial[i - 1] = i; // 배열에 값 저장
sum *= factorial[i - 1]; // 팩토리얼 계산
}
System.out.println("출력 : " + sum); // 결과 출력
sc.close(); // Scanner 객체 닫기
}
}
1. 입력 받기
- Scanner sc = new Scanner(System.in);
- System.out.print("입력 : ");
- int n = sc.nextInt();
2. 배열 초기화 및 팩토리얼 계산
- int[] factorial = new int[n];
- int sum = 1;
- for (int i = 1; i <= n; i++) { ... }
- 배열에 값을 저장하고, 팩토리얼을 계산합니다.
3. 결과 출력
- System.out.println("출력 : " + sum);
- sc.close();
코드 풀이 2: 재귀 호출을 사용한 방식
package Ex;
import java.util.Scanner;
public class Ex31Alternative {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("입력 : ");
int n = sc.nextInt();
int result = factorial(n); // 팩토리얼 계산
System.out.println("출력 : " + result); // 결과 출력
sc.close(); // Scanner 객체 닫기
}
// 팩토리얼을 재귀적으로 계산하는 메소드
private static int factorial(int n) {
if (n == 1) {
return 1; // 기본 케이스: n이 1일 때 1을 반환
} else {
return n * factorial(n - 1); // 재귀 호출을 통해 팩토리얼 계산
}
}
}
1. 팩토리얼 계산 및 결과 출력
- int result = factorial(n);
- System.out.println("출력 : " + result);
- sc.close();
2. 팩토리얼 재귀 메소드
- private static int factorial(int n) { ... }
- if (n == 1) { return 1; }
- 기본 케이스: nn이 1일 때 1을 반환합니다.
- else { return n * factorial(n - 1); }
- 재귀 호출을 통해 팩토리얼을 계산합니다.
마무리
이번 예제에서는 1보다 큰 정수 N을 입력하여 N! 값을 구하는 두 가지 방식의 프로그램을 다뤄보았습니다. 첫 번째 방식은 반복문을 사용한 기본 방식이며, 두 번째 방식은 재귀 호출을 사용한 방식입니다. 두 가지 방법 모두 이해하시는데 도움이 되길 바랍니다.
이로써 Java Festival의 모든 문제를 마무리하게 되었습니다. 지금까지 함께해주신 모든 분들께 감사드립니다. 이번 시리즈가 여러분의 자바 프로그래밍 실력을 향상시키는데 도움이 되었기를 바랍니다. 앞으로도 더 많은 유익한 내용을 준비하여 여러분과 함께 하겠습니다.
'프로그래밍 기초 > Java Festival' 카테고리의 다른 글
[Java Festival] 30. 알파벳 빈도수 구하기 (0) | 2024.07.07 |
---|---|
[Java Festival] 29. 두 정수의 합 맞추기 게임 (0) | 2024.07.05 |
[Java Festival] 28. 2진수를 10진수로 변환하기 (0) | 2024.07.05 |
[Java Festival] Bonus06. 거듭제곱 계산하기 (0) | 2024.07.05 |
[Java Festival] 27. Java 시험 문제 채점하기 (0) | 2024.07.05 |