小明思考

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

          快速開平方

          Posted on 2013-04-15 10:19 小明 閱讀(1471) 評論(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;
              }
          }




          主站蜘蛛池模板: 太康县| 邹城市| 定陶县| 铁岭县| 卓尼县| 醴陵市| 博客| 宣城市| 石棉县| 彩票| 榆社县| 民县| 宣恩县| 东山县| 禹州市| 多伦县| 伊宁市| 西乌珠穆沁旗| 武胜县| 长沙县| 太仆寺旗| 合水县| 云梦县| 南投市| 沾化县| 石家庄市| 石棉县| 壶关县| 巴青县| 乌兰浩特市| 洛川县| 广河县| 陈巴尔虎旗| 隆林| 保康县| 太康县| 百色市| 合山市| 泸州市| 湘阴县| 伊川县|