public static int fact(int x) {
int y = x;
for (int i = x - 1; i > 0; i--) {
y = y * i;
}
return y;
}
계승을 찾는 재귀 적 방법을 시도했지만 두 방법 모두 3057 또는 임의의 높은 값을 갖는 숫자와 같은 숫자에 대해 0을 제공합니다.Factorial 논리가 응답을 제공하지 않음
public static int fact(int x) {
int y = x;
for (int i = x - 1; i > 0; i--) {
y = y * i;
}
return y;
}
계승을 찾는 재귀 적 방법을 시도했지만 두 방법 모두 3057 또는 임의의 높은 값을 갖는 숫자와 같은 숫자에 대해 0을 제공합니다.Factorial 논리가 응답을 제공하지 않음
int
대신 long
을 사용해보세요. 당신은 아마 정수를 오버런하고있을 것입니다. 그래도 작동하지 않으면 큰 크기를 허용하는 BigInteger
으로 전환해야합니다.
편집 편집 해 주셔서 감사합니다.이 번호는 조금 피곤합니다. BigInteger의 기반 아래 코드는 3057.
public static BigInteger fact(int x){
BigInteger y = BigInteger.valueOf(x);
for(int i=x-1;i>0;i--){
y = y.multiply(BigInteger.valueOf(i));
}
return y;
}
의 입력에 근무 또는 당신은 BigDecimal
약간 덜 투박한 사용할 수 있습니다
public static BigDecimal fact(int x){
BigDecimal y = new BigDecimal(x);
for(int i=x-1;i>0;i--){
y = y.multiply(new BigDecimal(i));
}
return y;
}
왜 BigDecimal은 덜 "clunky"하다고 생각합니까? 또한 "계승"은 음수가 아닌 "정수"로 정의됩니다. –
전체 구현을 제공하려하지 않고 BigDecimal 및 BigInteger의 작동 방식을 보여줍니다. 그는 나머지 자신의 코드를 작성할 수 있습니다. ;) "clunky"에 대해서는'새로운 BigDecimal (x)'가'BigInteger.valueOf (x)'(개인 의견)보다 덜 복잡하다고 생각합니다. – Todd
그래, 정수 오버 플로우. 32 비트는 * 모든 것에 충분하지 않습니다 ... * –