2014-12-16 2 views
1

다음 알고리즘을 사용하면 완벽한 사각형을 계산할 수 있습니다.이 논리를 사용하여 제곱근을 계산하려고합니다. 그러나 어떻게 제곱근을 계산하는지 이해할 수 없습니다. 이 코드에서 작성된 논리를 수행하는 알고리즘이 있습니까?숫자가 완벽한 사각형인지 확인

public static boolean isPerfectSquare(BigDecimal num) { 
      BigDecimal squareRoot = one; 
      BigDecimal square = one; 
      BigDecimal i = one; 
      BigDecimal newSquareRoot; 
      int comparison = -1; 

      while (comparison != 0) { 
       if (comparison < 0) { 
        i = i.multiply(two); 
        newSquareRoot = squareRoot.add(i).setScale(0, RoundingMode.HALF_UP); 
       } else { 
        i = i.divide(two); 
        newSquareRoot = squareRoot.subtract(i).setScale(0, RoundingMode.HALF_UP); 
       } 

       if (newSquareRoot.compareTo(squareRoot) == 0) { 
        return false; 
       } 

       squareRoot = newSquareRoot; 
       square = squareRoot.multiply(squareRoot); 
       comparison = square.compareTo(num); 
      } 

      return true; 
     } 
+0

전체 코드를 공유 할 수 있습니까? 변수 'two'를 찾을 수 없습니다. – programmer

+0

하나, 둘 등의 모든 변수에 대한 언급은 전역 변수로 각각 –

+0

으로 초기화됩니다. 아마도 Newton-Raphson 알고리즘 일 것입니다. 그러나 어디에서 가져 왔는지는 사용되는 알고리즘을 문서화해야합니다. – EJP

답변

3

System.out.println() 전화를 추가하여 진행 상황을 시청하는 것이 좋습니다.

다음은 동일한 작업을 수행하고 101에서 실행 한 결과입니다. 너무 높을 때까지 단순히 추측을 증가시킨 다음 정확한 일치를 찾거나 일치하지 않을 때까지 추측을 수정합니다.

정제 프로세스는 너무 낮아질 때까지 단계적으로 점차적으로 단계적으로 줄이는 것입니다. 그런 다음 다시 점프 (단계가 두 배로 증가)하고 다시 아래쪽으로 움직이기 시작합니다. 단계 값이 1보다 작은 지점에 도달하면 매개 변수가 완벽한 사각형이 아니기 때문에 포기합니다. 어느 단계에서든 추측의 제곱이 매개 변수와 일치하면 제곱근을 찾았으므로 매개 변수가 완벽한 사각형임을 알 수 있습니다.

1 is lower than 101: adding 2. New guess at square root is 3 ( 9) 
    9 is lower than 101: adding 4. New guess at square root is 7 (49) 
    49 is lower than 101: adding 8. New guess at square root is 15 (225) 
225 is higher than 101: subbing 4. New guess at square root is 11 (121) 
121 is higher than 101: subbing 2. New guess at square root is 9 (81) 
    81 is lower than 101: adding 4. New guess at square root is 13 (169) 
169 is higher than 101: subbing 2. New guess at square root is 11 (121) 
121 is higher than 101: subbing 1. New guess at square root is 10 (100) 
100 is lower than 101: adding 2. New guess at square root is 12 (144) 
144 is higher than 101: subbing 1. New guess at square root is 11 (121) 
121 is higher than 101: subbing 0.5. New guess at square root is 11 (121) 
101 is not a perfect square 
+0

그런 종류의 알고리즘과 문제 해결에 대해 우리는 무엇을 말할까요. 대답에 항상 감사드립니다. 2-3시 이후 로직에 의해 괴롭혀 졌습니까? 일. –