2013-03-01 3 views
1

Привет У меня есть алгоритм, в котором мне нужно применить операции к BigInt's.BigInteger Modulo '%' Операция и меньше/больше, чем операции

Я понимаю, что BigInt можно манипулировать, используя класс математики, такие как:

import java.math.*; 

BigInteger a; 
BigInteger b = BigInteger.ZERO; 
BigInteger c = BigInteger.ONE; 
BigInteger d = new BigInteger ("3"); 
BigInteger e = BigInteger.valueOf(5); 

a.multiply(b); 
a.add(b); 
a.substract(b); 
a.divide(b); 

Мне нужно, чтобы иметь возможность применять больше, чем для условия, в то время как, например,

while (a > 0) { 

Что дает мне ошибку синтаксиса, говоря «плохие типы операндов для бинарного оператора„>“, первый тип: java.math.BigInteger, второй тип: INT

Я также должны быть в состоянии. применим оператор по модулю (%) к BigInteger.

b = a % c; 

Может кто-нибудь предложить способ сделать это?

Если это не решение, то я просто хочу, чтобы хоть как-то manipul съел мой BigInteger в уникальный Long, используя функцию уменьшения (что далеко не идеально).

Silverzx.

+2

[ 'BigInteger.compareTo'] (http://docs.oracle.com/javase/1.4.2/docs/api/java/math/BigInteger.html#compareTo (java.math.BigInteger)) и ['BigInteger.mod'] (http://docs.oracle.com/javase/1.4.2/docs/api/java/math/BigInteger.html#mod (java.math.BigInteger)). –

+0

Отлично, у меня теперь будет Google, не вижу, как compareTo будет работать с моей головы, но .mod имеет смысл! Большое спасибо! – silverzx

+0

@AlvinWong вы должны добавить это как ответ. – RudolphEst

ответ

6

Для сравнения BigInteger, используйте BigInteger.compareTo.

while(a.compareTo(BigInteger.ZERO) > 0) 
    //... 

И по модулю (%), используйте BigInteger.mod.

BigInteger blah = a.mod(b); 
0

Для сравнения BigIntegers вы можете использовать compareTo, но в специальном случае, когда вы сравниваете 0, метод signum также выполнит задание (и может быть немного быстрее). Что касается взятия оставшейся части данного деления, вы можете использовать метод mod (лучший вариант здесь) или альтернативно использовать divideAndRemainder, который возвращает массив с результатом как деления, так и остатка.

+0

Я не могу понять, как .compareTo будет использоваться, чтобы проверить, больше ли BigInt больше нуля. Было бы так? BigInteger n = "2712598012958912580129859"; BigInteger zero = BigInteger.ZERO; while (n.compareTo (ноль)> 0) { ? – silverzx

+0

@silverzx точно. Или, альтернативно, как я предложил: 'while (n.signum()> 0)' Кстати, в предлагаемом вами решении вам не нужно 'zero' просто использовать' BigInteger.ZERO' в цикле –