2009-10-20 2 views
1

У меня есть следующий код на голове метода:Проблем с java.math.BigInteger

BigInteger foo = BigInteger.valueOf(0); 
BigInteger triNum = BigInteger.valueOf(0); 

//set min value to 1*2*3*4*5*...*199*200. 
BigInteger min = BigInteger.ONE; 
BigInteger temp = BigInteger.ZERO; 
for(int i=1; i<=200; i++) 
{ 
    temp = BigInteger.valueOf(i); 
    min = min.multiply(temp); 
} 
System.out.println(min); 

while(triNum.compareTo(min) <= 0) 
{ 
    foo.add(BigInteger.ONE); 
    triNum = triNum.add(foo); 
    System.out.println("triNum: "+triNum); 
} 

Это, как предполагается загрузить мин до значения (1 * 2 * 3 * ... * 199 * 200), а затем установите triNum в первый * треугольный номер ** со значением больше мин.

Проблема в том, что когда я запускаю метод, все, что я получаю, это окно терминала со списком «triNum: 0», когда-либо прокручивающимся по экрану ... Я ничего не вижу в своем коде (хотя это вполне возможно, я допустил некоторую ошибку, и я немного не знаком с math.BigInteger), и это, похоже, указывает на класс BigInteger. Кто-нибудь видит ошибку в моем коде?

.............................................. .................................................. ..........................

* Номер треугольника - это номер, который может быть достигнут: 1 + 2 + 3 + 4 + 5 + 6 + 7 + ...

+4

Помимо ошибки с помощью foo.add, пожалуйста, обратите внимание, что ваша программа займет очень много времени, поэтому вы должны найти другой способ сделать то, что хотите. В качестве намека есть простая формула, чтобы узнать, что сумма 1 + 2 + 3 + 4 ... + n не содержит всех чисел. – schnaader

+0

Очень долго, как во много дольше, чем жизнь Вселенной (результат имеет 188 цифр). – starblue

ответ

9

Посмотрите на

foo.add(BigInteger.ONE); 

ли это обновление foo? Или он создает объект, который равен foo+ BigInteger.ONE, который не используется снова?

+0

Большое спасибо, что должно было быть очевидно, lol. знак равно – Jonathan

4

Foo всегда 0. Вы должны изменить эту строку:

foo.add(BigInteger.ONE); 

к этому:

foo = foo.add(BigInteger.ONE); 
3
foo.add(BigInteger.ONE); 

Как BigIntegers неизменны, вам нужно присвоить результат снова Foo :

foo = foo.add(BigInteger.ONE); 
Смежные вопросы