标签:
无需sqrt(x)库函数。为了实现平方根。
採用二分法
假定要求数num的平方根,那么首先取1~num之间的中点mid。
若 mid * mid > num,那么 根在 1~mid-1之间。
若 mid * mid < num,那么根在 mid+1~num 之间。
若 mid * mid == num,直接输出 mid;
因为整数int求平方根是向下取整。所以。若mid * mid < x情况下,根可能是mid. 根据上面如果根在mid+1~num之间,那么mid+1~num之间的全部跟都大于num。
所以在退出的时候要处理一下。
<span style="font-size:18px;">if (min*min > num) return min - 1; else return min;</span>
<span style="font-size:18px;">class Solution{ public: int getSqrt(int num) { if(num <= 0) return 0; int min = 0; int max = num; int mid = (min + max) / 2; int mark = 0.001; while (min <= max) { if (mid*mid == num) return mid; else if (mid*mid < num) min = mid+1; else max = mid-1; mid = (min + max) / 2; } if (min * min > num) return min - 1; else return min; } };</span>
代码2:考虑精度预计个数约等于num的平方根。精度自己定义,相同使用二分法。
float getSqrt(int num, float epsilon) { if(num <=0) return 0; float low, high, maymid; low = 0; high = max(1, num); maymid = (low + high) / 2.0; while (abs(maymid*maymid - num)>epsilon) { if (maymid * maymid == num) return maymid; if (maymid*maymid<num) low = maymid; else high = maymid; maymid = (low + high) / 2.0; } return maymid; }
參考资料:
标签:
原文地址:http://www.cnblogs.com/gcczhongduan/p/4855469.html