2012-07-20 3 views
9

큰 정수로 a%b을 어떻게 사용합니까? 자바에서 BigInteger의 % 연산자

... 
BigInteger val = new BigInteger("1254789363254125"); 
... 

boolean odd(val){ 
    if(val%2!=0) 
     return true; 
    return false; 
... 

같은 이클립스 연산자 %는 BigInteger를 위해 정의되지 않은 것을 말한다.

아이디어가 있으십니까?

+3

BigInteger javadoc의'mod' 함수를보십시오. –

답변

19

:

BigInteger val = new BigInteger("1254789363254125"); 
public boolean odd(BigInteger val) { 
    if(!val.mod(new BigInteger("2")).equals(BigInteger.ZERO)) 
     return true; 
    return false; 
} 

또는 사용자 던컨 코멘트에 제안, 우리는과 같이 전부 if 문을 수행 할 수 있습니다

BigInteger val = new BigInteger("1254789363254125"); 
public boolean odd(BigInteger val) { 
    return !val.mod(new BigInteger("2")).equals(BigInteger.ZERO)); 
} 
+0

val % 2 == 0 인 경우 짝수가 아닌 이상한 숫자. –

+0

감사, 느낌표를 잊어 버렸습니다. – jrad

+0

if 문은 필요 없으며, return! val.mod (new BigInteger ("2")). equals (BigInteger.ZERO);'. –

1

val.mod (2)를 사용하십시오.

BigInteger는 개체입니다. 원시 연산자에서만 작동하는 객체에 산술 연산자를 사용할 수 없습니다.

%는 java.lang.Integer에서만 작동합니다. 이는 암시 적으로 캐스팅 (사실상 unboxed라고 함)되기 때문입니다. 그러나 BigInteger는 unbox 될 수 없습니다. unboxing/baxing (객체 - 원시/원시 - 객체 변환을 의미 함)은 int, float, double, short 및 byte에서만 작동합니다. 이처럼

2

훨씬 더 효율적인 방법을 객체로 변환하기 때문에 정수의 경우, 플로트, 당신은 연산자를 사용할 수 있습니다 마지막 비트를 확인하는 것입니다. 0 (일명 false)이면 숫자는 짝수입니다. 그렇지 않으면 이상합니다.

public boolean odd(BigInteger i){ 
    return i.testBit(0); 
} 

odd(BigInteger.valueOf(1));//true 
odd(BigInteger.valueOf(2));//false 
odd(BigInteger.valueOf(101));//true 
odd(BigInteger.valueOf(100));//false 

또한 코드 라인이 적습니다.

2

나는이 방법으로 BigInteger 클래스의 방법 remainder을 사용하십시오 :

BigInteger result = a.remainder(b); 

할당이 BigInteger를 불변이라는 사실 때문이다, 그래서이 방법으로 변경되지 않습니다.