乙個經典得題目是求平方根(見leetcode第69題)
題目如下,對於某個浮點數x,求其平方根。
方法一:二分法:
這種是最簡單的,就是定義乙個最小值0和最大值number,把乙個數取乙個中間值(0+number)/2,然後平方,如果平方大於該數值,就把中間值賦給最大值,否者就把中間值賦給最小值,一直迴圈,直到取到想要的精度為止。
//方法二:牛頓法二分法
double sqrt1(double
x)
else
mid = (high + low) / 2
; }
return
mid;
}
這個也是有跡可循的,求平方根即x^2=n。
令f(x)=x^2-n
如圖所示:
取x0,如果x0不是解,做乙個經過(x0,f(x0))這個點的切線,與x軸的交點為x1。
同理,如果x1不是解,做乙個經過(x1,f(x1))這個點的切線,與x軸的交點為x2。
以此類推。
以這樣的方式得到的xi會無限趨近於f(x)=0的解。
判斷xi是否是f(x)=0的解有兩種方法:
一是直接計算f(xi)的值判斷是否為0,
二是判斷前後兩個解xi和xi-1是否無限接近。
先採用第一種方法判斷
(f(x)-f(xi))/(x-xi)=f』(x),f』(x)是斜率也是f(x)的導函式,即f』(x)=2x。
化簡得:f(xi)=f(x)-f』(x)(x-xi),令f(xi)=0得:
(x^2-n)-2x(x-xi)=0
持續化簡得:
xx-n-2xx+2xxi=0
2xxi=xx+n
2xi=x+n/x
xi=(x+n/x)/2
這樣就得到了一元等式,就可
//以進行程式設計了。牛頓迭代法
double sqrt2(double
x)
return
res;
}
求x 的平方根 二分查詢
題目 實現 int sqrt int x 函式。實現 int sqrt int x 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。思路 因為x是非負整數,那麼當x是0的時候平方根為0,x為1時平方根為1,只有當x大於1時才需要計算因...
求n的算術平方根(計算平方根的巴比倫的方法)
正數n的平方根可以通過計算一系列近似值來獲得,每個近似值都比前乙個更加接近準確值,第乙個近似值是1,接下來的近似值則通過下面的公式來獲得 ai 1 ai n ai 2 include includeint main int argc,char argv new guess 1 dowhile new...
力扣求平方根三種方法小白理解
主要理清二分法關鍵,且注意避免mid平方的誕生 二分法不過就是不斷縮小左值右值的區間,使其左值與右值接近相等,而左值右值此時都為整型 所以接近相等時即為二者相差1,此時取小的數即為所求根。注意對於乙個非負數其取整數的平方根一定在其0到他的一半之間 除了0,1 c intmysqrt int x if...