日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

求X的算术平方根

發(fā)布時間:2023/12/16 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 求X的算术平方根 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

求X的算術(shù)平方根

  • 求X的算術(shù)平方根
    • 方法一(sqrt(x))函數(shù)
    • 方法二 二分查找法
    • 方法三 指數(shù)對數(shù)互換
    • 方法四 牛頓迭代法
  • 結(jié)語

求X的算術(shù)平方根

啊,本菜狗今天又一道簡單題,結(jié)果本菜狗一如既往的只會最簡單的操作,最后看一些大佬的題解,最后整理了一下,準備記錄一下。

給定X,求其算是平方根(默認整數(shù)哈)。
如 x = 10,最后輸出 3 。

方法一(sqrt(x))函數(shù)

直接調(diào)用sqrt(x)函數(shù)即可,便可以直接運算出答案。(這也是本菜狗看到題目后第一瞬間想到的方法)

int x;cin>>x;cout<<int(sqrt(x))<<endl; 輸入:19 輸出:4

這個就是直接調(diào)用函數(shù)就可以了,沒有什么好說的。

方法二 二分查找法

對從0 到 x的數(shù)進行二分查找,找出X的算術(shù)平方根。
因為我們是找的整數(shù)型,所以我們在最后返回的時候,應(yīng)該是返回第一個平方大于X的數(shù)的左側(cè)。

即 假定 x=8 ,第一個平方大于x的是3,所以返回3左側(cè)的數(shù) 2。
因為8本身的平方根就是2.82843,將2.82843取整,也就得到了2。

int TSqrtX(int x){//二分查找版 int low = 0;int high = x-1;while(low<=high){int middle=low + (high - low)/2;//middle每次為高位低位的一半if(middle == x/middle){return middle;}else if(middle > x/middle){high = middle - 1;}else{low = middle + 1;}}return high;//返回high,因為最后high的位置就是大于X的數(shù)的左側(cè)。 }

方法三 指數(shù)對數(shù)互換

根據(jù)指數(shù)對數(shù)互換原則可以得到這個結(jié)論。

之后再根據(jù)exp函數(shù)和log函數(shù)進行求取就行。因為涉及到精度浮點的問題,所以要進行浮點比較。就可以了。

上代碼

int elog(int x){//數(shù)學(xué)版if(x==0)return 0;long long result= exp(0.5*log(x));return ((result+ 1) * (result+ 1) <= x ? result+ 1 : result); }

方法四 牛頓迭代法

采用牛頓迭代法進行求根。
設(shè)函數(shù)為

進行一階泰勒展開得


帶入公式進行計算得出

即只要xn+1 與xn的差值進行收斂即可
上代碼:

int NRmethod(int x){//牛頓迭代法 if(x==0)return 0;double c = x ,xi = x;while(true){double xn = 0.5*(xi+c/xi);if(fabs(xn-xi)<1e-7){//fabs求絕對值break;}xi=xn;}return (int)xi; }

結(jié)語

啊,本菜狗又是水題的一天

總結(jié)

以上是生活随笔為你收集整理的求X的算术平方根的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。