Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 이진 검색을 사용하여 주어진 정밀도까지 숫자의 제곱근 찾기

<시간/>

양수 n과 정밀도 p가 있다고 가정합니다. 이진 검색 기술을 사용하여 소수점 p까지의 숫자 n의 제곱근을 찾아야 합니다. 따라서 숫자가 n =50이고 p =3이면 출력은 7.071입니다.

따라서 이 문제를 해결하려면 몇 가지 단계를 따라야 합니다.

  • 시작:=0 및 끝:=n 초기화
  • 중간 정수의 제곱을 비교합니다. 이것이 숫자와 같으면 정수 부분을 찾은 것이고, 그렇지 않으면 필요에 따라 왼쪽 또는 오른쪽을 찾습니다.
  • 적분 부분에 대한 작업을 완료했으면 분수 부분에 대한 작업을 완료합니다.
  • 증가 변수를 0.1로 초기화한 다음, p자리까지 소수 부분을 계산합니다. 각 반복에 대해 증분은 이전 값의 1/10로 변경됩니다.
  • 드디어 답을 반환합니다.

예시

#include<iostream>
using namespace std;
float sqrtBinarySearch(int num, int p) {
   int left = 0, right = num;
   int mid;
   float res;
   while (left <= right) {
      mid = (left + right) / 2;
      if (mid * mid == num) {
         res = mid;
         break;
      }
      if (mid * mid < num) {
         left = mid + 1;
         res = mid;
      } else {
         right = mid - 1;
      }
   }
   float incr = 0.1;
   for (int i = 0; i < p; i++) {
      while (res * res <= num) {
         res += incr;
      }
      res -= incr;
      incr /= 10;
   }
   return res;
}
int main() {
   int n = 50, p = 3;
   cout << "Square root of " << n << " up to precision " << p << " is: " << sqrtBinarySearch(50, 3) << endl;
}

출력

Square root of 50 up to precision 3 is: 7.071