2013-11-23 2 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'의 범위에 있기 때문에 단위까지 모든 자릿수를 얻는 것은 아닙니다. –

답변

2

2^1000은 일반적인 데이터 유형에 비해 커집니다. BigInteger 또는 문자열을 사용하십시오.

import java.math.BigInteger; 

를 BigInteger로 입력 받아 : 이제

BigInteger n = BigInteger.valueOf(2); 

1000에 전원을 :

n = n.pow(1000); 

을 이제 toString()를 사용하여 문자열로 변환 한 후, 각 문자를 추가 결과에 int으로 변경하십시오. 그렇게해야합니다.