使用 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

更新于: 2019年12月19日

1K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.