對於Project Euler問題#14我找不到什麼問題。我的第一步是找到算法,直到數字達到120000左右爲止。代碼破譯並意識到我需要使用BigIntegers。我轉換我的算法以適應這種變化,但現在它不起作用。Java:找到Collatz序列中最大的鏈
我已經添加了System.out.print(chain_length)來幫助我在我的代碼可能會破壞的地方。
public static void main(String[] args) {
BigInteger target = new BigInteger("1000000");
BigInteger n = new BigInteger("0");
final BigInteger zero = new BigInteger("0");
final BigInteger one = new BigInteger("1");
final BigInteger two = new BigInteger("2");
final BigInteger three = new BigInteger("3");
final BigInteger ten = new BigInteger("10");
int greatest_index = 0;
int greatest_length = 0;
int chain_length = 0;
BigInteger i = new BigInteger("2");
for(i.equals(2) ; i.compareTo(target) == -1 ; i = i.add(one)) {
n = i;
chain_length = 1;
while(n.compareTo(one) == -1) {
chain_length++;
if(n.mod(ten).equals(zero) == true){//even
n = n.divide(two);
}else{//odd
n = n.multiply(three);
n = n.add(one);
}
if(n.equals(one) == true && chain_length > greatest_length){
greatest_length = chain_length;
greatest_index = i.intValue();
}
}
System.out.println(chain_length);
}
System.out.println(greatest_index);
}
僅供參考,你不需要'BigInteger's,'long'就夠了。 –