使用C ++中的二进制搜索查找数字的平方根直至给定的精度

假设我们有一个正数n,精度为p。我们必须使用二进制搜索技术找到数字n的平方根,直到p个小数位。因此,如果数字为n = 50,且p = 3,则输出为7.071。

所以解决这个问题,我们必须遵循一些步骤-

  • 初始化start:= 0和end:= 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