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