2013-11-23 47 views
0

我正在做項目歐拉的一些問題,我偶然發現了一個問題。 我不知道爲什麼這個算法不適用於2^1000。它適用於10^1和10^8範圍內的數字(這些是我測試過的),但它應該適用於所有可能的範圍。順便提一下,2^1000爲1.07 * 10^301。雙數的上限或多或少在10^308,所以這個數字仍然在範圍內。總和的數字問題

import java.lang.Math; 

public class Euler15 { 
    public static void main(String[] args) { 


     int count = 0; 
     double res = Math.pow(2,1000); 

     for(int i = 301; i >= 0; i--){ 
      if (res == 0){ 
       break; 
      } 
      while (res >= Math.pow(10, i)){ 
       res-= Math.pow(10, i); 
       System.out.println(res); 
       count++; 
      } 
     } 

    System.out.println(count); 
} 
} 
+0

因爲2^1000是方式大! – Ranveer

+0

可能是一個舍入問題。 – wvdz

+0

僅僅因爲它在'double'的範圍內,並不意味着你將所有的數字都提高到單位。 – 2013-11-23 21:55:55

回答

2

2^1000是正常數據類型的大方法。使用BigInteger或字符串。

import java.math.BigInteger; 

以輸入爲一個BigInteger:

BigInteger n = BigInteger.valueOf(2); 

現在電也高達1000:

n = n.pow(1000); 

現在,使用toString()它轉換成字符串,然後,添加每個字符根據您的結果,將其更改爲int。這應該做到這一點。