2012-07-20 12 views
9

Jak używać a%b z dużymi liczbami całkowitymi? jakOperator% dla BigInteger w java

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

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

Eclipse mówi, że operator% jest niezdefiniowana dla BigInteger.

Wszelkie pomysły?

+3

Spójrz na funkcję 'mod' w javadoc BigInteger. –

Odpowiedz

19

Jak to:

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

Albo jako użytkownik Duncan sugerowane w komentarzu, możemy wyjąć if zupełnie tak:

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

Jeśli wartość% 2 == 0 to liczba parzysta, nieparzysta. –

+0

Dzięki, zapomniałem o wykrzykniku. – jrad

+0

Nie ma potrzeby instrukcji if, po prostu 'return! Val.mod (new BigInteger (" 2 ")). Equals (BigInteger.ZERO);'. –

1

Użyj val.mod (2).

BigInteger to obiekt. Nie można używać operatorów arytmetycznych na obiektach, które działają tylko z prymitywami.

% działa tylko z java.lang.Integer, ponieważ jest to niejawnie rzutowane (tak naprawdę nazywa się unboxed) na int. Ale BigInteger nie może być rozpakowany. unboxing/baxing (czyli obiekt do konwersji pierwotnej/pierwotnej do obiektu) działa tylko z int, float, double, short i byte.

2

znacznie bardziej efektywny sposób jest sprawdzenie ostatniego bitu. Jeśli jest to 0 (alias false), liczba jest równa, w przeciwnym razie jest nieparzysta.

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 

Również mniej wierszy kodu.

2

użyję metody remainder z klasy BigInteger w ten sposób:

BigInteger result = a.remainder(b); 

Zadanie to wynika z faktu, że BigInteger jest niezmienna, a więc nie będą zmieniane metodą.