力扣求平方根三種方法小白理解

2021-10-10 08:44:37 字數 994 閱讀 4906

主要理清二分法關鍵,且注意避免mid平方的誕生

二分法不過就是不斷縮小左值右值的區間,使其左值與右值接近相等,而左值右值此時都為整型

所以接近相等時即為二者相差1,此時取小的數即為所求根。

注意對於乙個非負數其取整數的平方根一定在其0到他的一半之間(除了0,1)

```c

intmysqrt

(int x)

if(x==1)

if(x==0)

while

(left+

1//此為界定條件,乙個巧妙的1使得最後經過若干次迴圈後,左值右值差不多相等

//此為一種界定區間方法,即若mid方過大,所以縮小左值右值,使右值為原先的mid

else

//為第二種情況時接著由於結果已經確定了其實,所以只要不斷修改右值即可,因為mid在下一次運算會變大

}// 所以就會進入使右值縮小的語句。

return left;

//經過不斷的縮小左右區間,最後由於**中x/mid==mid的條件成立時返回的mid給了left

}//所以最後輸出的為left

**

int

mysqrt

(int x)

*即利用exp函式 即將求根式進行個轉換。

exp即相當於加了個底數e

*

intmysqrt

(int x)

int result =

exp(

0.5*

log(x));

return((

long

long

)(result +1)

*(result +1)

<= x ? result +

1: ans)

;}

注意因為這會產生誤差,所以結果要在result和result+1內查詢

求x得平方根得兩種方法

乙個經典得題目是求平方根 見leetcode第69題 題目如下,對於某個浮點數x,求其平方根。方法一 二分法 這種是最簡單的,就是定義乙個最小值0和最大值number,把乙個數取乙個中間值 0 number 2,然後平方,如果平方大於該數值,就把中間值賦給最大值,否者就把中間值賦給最小值,一直迴圈,...

求素數的三種方法

具體篩法是 先把n個自然數按次序排列起來。1不是質數,也不是合數,要划去。第二個數2是質數留下來,而把2後面所有能被2整除的數都劃去。2後面第乙個沒劃去的數是3,把3留下,再把3後面所有能被3整除的數都劃去。3後面第乙個沒劃去的數是5,把5留下,再把5後面所有能被5整除的數都劃去。這樣一直做下去,就...

求Fibonacci數列的三種方法

fibonacci數列 0,1,1,2,3,5,8,13。第一招 遞推法 includeint f 47 int main 第二招 不斷變換初始 include int main if n 1 n 2 puts 1 else if n 0 puts 0 else printf d n f3 retu...