BigInteger прост в использовании, и вы не рискуете проблемами с точностью.(В данном конкретном случае я не думаю, что есть проблема точности, потому что Math.pow(2, 1001) % 100000
возвращает правильные последние 5 цифр, но для больших чисел в конечном итоге вы потеряете информацию.) Вот как вы можете использовать BigInteger:
groovy:000> b = new BigInteger(2L)
===> 2
groovy:000> b = b.pow(1001)
===> 214301721437253464189685009812000362112280962341106721488750077674070210224
98722449863967576313917162551893458351062936503742905713846280871969155149397149
60786913554964846197084214921012474228375590836430609294996716388253479753511833
1087892154125829142392955373084335320859663305248773674411336138752
groovy:000> ((b + "").toList().collect {new Integer(it)}).inject(0) {sum, n -> sum + n}
===> 1319
Вот то же самое в Java:
public class Example
{
public static void main(String[] args)
{
int sum = 0;
for (char ch : new java.math.BigInteger("2").pow(1001).toString().toCharArray()) {
sum += Character.digit(ch, 10);
}
System.out.println(sum);
}
}