Мне нужно найти 2 в степени N, где N - очень большое число (тип Java BigInteger)
Класс Java BigInteger имеет метод pow, но в качестве показателя степени он принимает только целочисленное значение.
Итак, я написал метод следующим образом:
static BigInteger twoToThePower(BigInteger n)
{
BigInteger result = BigInteger.valueOf(1L);
while (n.compareTo(BigInteger.valueOf((long) Integer.MAX_VALUE)) > 0)
{
result = result.shiftLeft(Integer.MAX_VALUE);
n = n.subtract(BigInteger.valueOf((long) Integer.MAX_VALUE));
}
long k = n.longValue();
result = result.shiftLeft((int) k);
return result;
}
Мой код работает нормально, я просто делюсь своей идеей, и мне интересно узнать, есть ли другая идея получше?
Спасибо.
n <= 63
, и просто сделать1L << n.longValue();
. Также проверьте наличиеn == 0
. Но я думаю, если вы скажете, что он всегда большой, в этом может не быть необходимости. - person Neijwiert   schedule 20.06.2019