2013-02-14 2 views
1

По какой-то причине BigInteger работает не так, как хотелось бы. Я делаю BigVariable.add (BigVariable), но он не добавит. Результатом всегда является значение, которое оно инициализируется. Кто-нибудь знает, что мне не хватает? Заранее спасибоПроблемы с BigInteger

Код для проекта Euler 48

import java.math.BigInteger; 


public class tuna { 
public static void main(String[] args) { 
    BigInteger result = BigInteger.ZERO; 
    for(int i= 1; i <= 1000; i++) 
     result.add(bigPow(BigInteger.valueOf(i), i)); 
    System.out.println(result); 
} 
public static BigInteger bigPow(BigInteger number, int pow){ 
    if(pow < 1) 
     throw new RuntimeException("bigPow can't handle exponents lower than 1"); 
    if (pow == 1) 
     return number; 
    return number.multiply(bigPow(number, pow-1)); 
} 

} 
+0

возможно дубликат [Java: Как использовать BigInteger] (http://stackoverflow.com/questions/1783912/java-how-to-use-biginteger) – finnw

ответ

6

Try:

result = result.add(bigPow(BigInteger.valueOf(i), i)); 

вместо:

result.add(bigPow(BigInteger.valueOf(i), i)); 

Вы должны сделать это, потому что BigInteger неизменен (Immutable arbitrary-precision integers). Поэтому вам нужно переназначить результат.

добавить

общественного BigInteger добавить (BigInteger Валу)

Возвращает BigInteger, значение которого является (это + вал). Параметры: val - значение, которое должно быть добавлено к этому BigInteger. Возвращает: это + вал

+0

вас сударь, очень умно. Спасибо вам за помощь. По какой-то причине я думал, что BigVarible.function() передан по ссылке. –

+2

@JoshHorowitz Я только что прочитал много :) – dreamcrash

+0

Спасибо. Не имел представления. –

Смежные вопросы