양수 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