目 录CONTENT

文章目录

C++ 实现 sqrt()

TalentQ
2025-09-18 / 0 评论 / 0 点赞 / 3 阅读 / 0 字

题目描述

C++中提供了 sqrt() 用于计算算术平方根:

#include <iostream>
#include <cmath>


int main() {
  int n = 17;
  double res = std::sqrt(n);
  
  std::cout << res << std::endl;

  return 0;
}

现在要求不使用 sqrt(),手动实现一个函数用于计算算术平方根。

题解

牛顿迭代法:

#include <iostream>

double Sqrt(int n) {
  if (x == 0) {
    return 0;
  }
  double guess = n;
  double precision = 1e-10;
  while (std::abs(guess * guess - n) > precision) {
    guess = (guess + n / guess) / 2;
  }
  return guess;
}

int main() {
  int n = 17;
  double res = Sqrt(n);

  std::cout << res << std::endl;

  return 0;
}

有一种优雅的写法,有空了可以研究一下,顺便看一下牛顿迭代的几何表示。

double mySqrt(int x) {
  if (x == 0) {
    return 0;
  }
  double r = x;
  while (r > x / r) {
    r = x / r + (r - x / r) / 2;
  }
  return r;
}

二分法:

int mySqrt(int x) {
  if (x == 0 || x == 1) {
    return x;
  }
  int left = 0;
  int right = x;
  while (left <= right) {
    int mid = left + (right - left) / 2;
    if (mid <= x / mid) {
      left = mid + 1;
    } else {
      right = mid - 1;
    }
  }
  return right;
}

0

评论区