2017-04-19 3 views
0

5! = 5 * 4 * 3 * 2 * 1.Java의 정수가 아닌 계승

이 문제는 없습니다. 그러나 내 프로그램에서 3.5라고 입력하면 알아 차렸다. 정의 된 숫자를 반환합니다.

어떻게 계산합니까?

내가 내 프로그램에서 이런 일이

public class fact { 
    public static void main(String args[]) { 
    double factorial=1; 
    System.out.println("Type a number"); 
    double number= sc.nextDouble(); /*I am using scanner*/ 
    while (number !=0){ 
     factorial = factorial * number; 
     number--; 
    } 
    System.out.println(factorial); 
    } 
} 
+0

나는 당신의 문제를 이해하지 못합니까? 조금 더 자세히 설명해 주시겠습니까? – Koekje

+0

이 링크를 참조하십시오 https://math.stackexchange.com/questions/454053/how-do-we-calculate-factorials-for-numbers-with-decimal-places – tabby

+0

계승 함수는 정수에 대해서만 정의됩니다. 왜 3.5를 입력으로 받아들이려고합니까? – jsheeran

답변

2

것입니다 계승전체, 긍정적 인 번호에 대한 아주 간단합니다.

도 부동 소수점 수에 적용 할 수 있지만 그 뒤의 수학은 advanced으로 간주 될 수 있습니다.

So : 한 걸음 뒤로; 그리고 개념을 배후에 수학 이해; 개념을 구현하기 전에!

즉, 당신은 int 숫자 (0보다 큰 것으로 검증 됨)로 작업하도록 프로그램을 변경하고자하는지 여부를 결정해야합니다. 또는 부동 소수점 숫자를 허용하려는 경우. 나중에 당신의 목표 인 경우; 당신의 간단한 구현은 더 이상하지 않을 것입니다.

너머 : 부동 소수점의 개념을 연구하고 싶습니다./긴 대신 INT의 부동 소수점 숫자를 사용하는 경우 루프

double number = ... 
while (number !=0) { 
    .. 
    number--; 
} 

처럼 항상 멈출 것이라고 생각하는 오해입니다! 반대로 ...

5

일반 정의에서 요인은 양의 정수에만 정의됩니다. 모든 실수에 대한 계승을 계산하려면 감마 함수을보십시오.

https://en.wikipedia.org/wiki/Gamma_function

+1

이것은 정답입니다. 감마 함수는 double의 계승을 계산할 수있게 해줍니다. –

0

코드는 다음과 같이 계산됩니다 있기 때문에 당신은!, 심지어 3.5에 대해 정의 된 값을 받고 :

1*3.5*2.5*1.5*0.5 

을하지만 실제로는 3.5 잘못된 값입니다! 올바른 값은 11.6317283966입니다. 귀하의 방법은 정수 입력에만 유효합니다. 십진 계승에 대한 자세한 내용은 다음을 참조하십시오. this link

+0

실제로 OP의 코드는 'number! = 0'을 확인하기 때문에 거기에서 멈추지 않을 것입니다. 이것은 여전히 ​​0 아래에서 true입니다. – Hulk