2013-11-23 44 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。这应该做到这一点。