小明思考

          Just a software engineer
          posts - 124, comments - 36, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          快速開平方

          Posted on 2013-04-15 10:19 小明 閱讀(1469) 評論(0)  編輯  收藏 所屬分類: 數據結構和算法
          問題實現 int sqrt(int x);
          計算和返回x的平方根。

          學過數值分析的都知道牛頓迭代法



          令f(x) = x2-a;
          那么上式就變成:

          xn+1 =xn-(xn2-a)/(2*xn)=(xn+a/xn)/2

          實現的代碼如下,簡單優美,收斂快。

          public class Solution {
              public int sqrt(int x) {
                  if(x==0) return 0;
                  if(x<=2) return 1;
                  int result = x/2;
                  while(true){
                      int next = (result+x/result)/2;
                      if(next>=result){
                          break;
                      }
                      else{
                          result = next;
                      }
                  };
                  return result;
              }
          }




          主站蜘蛛池模板: 泉州市| 丰镇市| 长治县| 隆子县| 平罗县| 原阳县| 绥阳县| 同江市| 南充市| 丁青县| 江达县| 甘谷县| 葵青区| 浮山县| 阿图什市| 武邑县| 马龙县| 曲松县| 上思县| 修水县| 承德市| 萨嘎县| 光泽县| 清水县| 天台县| 锡林郭勒盟| 昌都县| 香河县| 赤壁市| 故城县| 即墨市| 元谋县| 邯郸县| 新安县| 苍溪县| 正安县| 两当县| 台东市| 沁水县| 五原县| 搜索|