IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

用牛顿迭代法求整数的平方根

A programmer's life 2014-11-25 22:50:14 累计浏览 3,201 次
本机暂存

   这是一个挺常见的面试题,解法也五花八门。

   下面的代码用牛顿迭代法解决这个问题。因为输入和输出都是整数,所以只要前后两项相差小于1,就可以终止了

int sqrt(int x) {
  if (x < 0) abort();
  if (x == 0) return 0;
  if (x == 1) return 1;
  double t = x >> 1;
  t = (t + x / t) / 2;
  while (true) {
    double v = (t + x / t) / 2;
    if (fabs(v - t) < 1) {
      t = v;
      break;
    }
    t = v;
  }
  t=floor(t);
  if (t * t > x) t--;
  return t;
}

   我本来想用有理数运算来代替double,后来发现不行,迭代次数过多后,如果分子分母约分约不下去,就溢出了。

   上面这段代码其实也就只能应付面试,实际有很多比这个更优的方案,比如打表。

同分类推荐文章

  1. 对基本有序的序列排序算法 (2026-06-11 17:46:49)
  2. Four Levels Of Customer Understanding (2026-05-22 21:00:00)
  3. 除法的意义 (2026-04-12 20:52:17)

查看更多 算法 文章 →

建议继续学习

  1. 编写安全代码:小心使用浮点数 (累计阅读 3,797)
  2. 一道随机数题目的求解 (累计阅读 3,205)
  3. 如果对Heron公式求导的话 (累计阅读 1,547)