자바 펙토리얼 수열 계산
조회수 1476회
import java.util.Scanner;
public class Test {
public static void main(String [] args)
{
double e = 0.0;
double ins_sum = 0.0;
int n = 0;
int ins_fact = 1;
Scanner sc = new Scanner(System.in);
System.out.print("정수를 입력하시오 : ");
n = sc.nextInt();
for(int i = n; i>=1; i--) {
for(int j = i; j>=1; j--) {
ins_fact = ins_fact*j;
}
ins_sum = 1.0/ins_fact;
e += ins_sum;
ins_fact = 1;
ins_sum = 0;
}
System.out.println("n이 "+n+"일 때 e의 값은 "+e+"이다.");
}
}
위 코드는 "1 + 1/1! + 1/2! + 1/3! + 1/4! + 1/5! + ..." 을 계산하기 위한 코드입니다
위 코드를 실행하고 10을 입력하면 맞는 정답이 나옵니다. 그런데 제가 찾아야 할 값은 n = 200 과 n = 10000 일 때의 경우인데 34이상의 수를 n에 대입하면 e의 값이 Infinity로 나옵니다...
33까지의 결과값은 일일히 계산기로 계산한 결과와 비교해보니 맞기에 코드 자체가 틀린 것 같지는 않은데...
해결할 수 있는 법이 있나요???
1 답변
-
참고만 하세요 +1 을 해야겠네요
import java.math.BigDecimal; public class Test { public static void main(String [] args) { BigDecimal e = new BigDecimal("0.0"); BigDecimal ins_sum = new BigDecimal("0.0"); int n = 0; //long ins_fact = 1; BigDecimal ins_fact = new BigDecimal("1"); //Scanner sc = new Scanner(System.in); //System.out.print("정수를 입력하시오 : "); n = 50;//sc.nextInt(); for(int i = n; i>=1; i--) { for(int j = i; j>=1; j--) { ins_fact = ins_fact.multiply(BigDecimal.valueOf(j)); } System.out.println(ins_fact); ins_sum = BigDecimal.valueOf(1.0/ins_fact.doubleValue()); e = e.add(ins_sum); ins_fact = new BigDecimal("1"); ins_sum = new BigDecimal("0.0"); } System.out.println("n이 "+n+"일 때 e의 값은 "+e+"이다."); } }
n이 50일 때 e의 값은 1.718281828459045225790675731474643113446000753801893200897038675982544982489290584이다.
댓글 입력