English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 프로그램에서는 Java의 for와 while 루프를 사용하여 숫자의 팩토리얼을 찾는 방법을 배웁니다.
정수의 팩토리얼은 다음과 같이 n으로 주어집니다:
n의 팩토리얼 (n!) = 1 * 2 * 3 * 4 * ... * n
public class Factorial { public static void main(String[] args) { int num = 10; long factorial = 1; for(int i = 1; i <= num; ++i) { // factorial = factorial * i; factorial *= i; } System.out.printf("%d의 팩토리얼 = %d", num, factorial); } }
이 프로그램을 실행할 때, 출력은 다음과 같습니다:
n의 팩토리얼 10 = 3628800
이 프로그램에서는 for 루프를 사용하여 순회했습니다.1주어진 숫자 num(10) 사이의 모든 숫자, 각 숫자의 num까지의 곱셈을 계산하여 변수 factorial에 저장합니다.
팩토리얼의 큰 결과를 저장하기 위해 long 대신 int를 사용하지만, 여전히 크기가 충분하지 않아 더 큰 숫자의 값을 저장할 수 없습니다. 예를 들어(100의 팩토리얼)
long 변수에 저장할 수 없는 결과에 대해, java.math 라이브러리에서 선언된 BigInteger 변수를 사용합니다.
import java.math.BigInteger; public class Factorial { public static void main(String[] args) { int num = 30; BigInteger factorial = BigInteger.ONE; for(int i = 1; i <= num; ++i) { // factorial = factorial * i; factorial = factorial.multiply(BigInteger.valueOf(i)); } System.out.printf("%d의 팩토리얼 = %d", num, factorial); } }
이 프로그램을 실행할 때, 출력은 다음과 같습니다:
30의 팩토리얼 = 265252859812191058636308480000000
이곳에서는 BigInteger를 long 대신 사용하여 팩토리얼을 저장합니다.
때문에*BigInteger와 함께 사용할 수 없기 때문에, 이 제품에 대해 multiply()를 사용합니다. 또한, num은 강제로 BigInteger로 변환하여 곱셈을 수행해야 합니다.
기본적으로*BigInteger와 함께 사용할 수 없으므로, 계산에 대해 multiply()를 사용합니다. 또한, num은 곱셈 연산을 위해 BigInteger로 변환되어야 합니다.
또한, 이 문제를 해결하기 위해 while 루프를 사용할 수도 있습니다.
public class Factorial { public static void main(String[] args) { int num = 5, i = 1; long factorial = 1; while(i <= num) { factorial *= i; i++; } System.out.printf("%d의 인과식 = %d", num, factorial); } }
이 프로그램을 실행할 때, 출력은 다음과 같습니다:
5 의 인과식 = 120
위의 프로그램에서 for 루프와 달리, 반복 내에서 i의 값을 증가시켜야 합니다.
두 프로그램 모두 기술적으로 올바르지만, 이 경우 for 루프를 사용하는 것이 더 좋습니다. 이는 반복 횟수(최대 num)가 이미 알려져 있기 때문입니다.