主要理清二分法關鍵,且注意避免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...