File tree Expand file tree Collapse file tree 1 file changed +47
-0
lines changed Expand file tree Collapse file tree 1 file changed +47
-0
lines changed Original file line number Diff line number Diff line change
1
+ 两个题目都是一半半的来解答,sqrt 的那个分解更加隐藏,是需要相应的数学知识来证明的
2
+ class Solution {
3
+ public:
4
+ int sqrt(int x) {
5
+ int left = 1,right = x / 2;// 最大到此数的一半
6
+ int last_mid = 0; // 来记录不能整开方的数,上一次数值就是答案
7
+ if(x < 2)
8
+ return x;
9
+ while(left <= right)
10
+ {
11
+ int mid = left + (right - left)/2;
12
+ if(x / mid > mid) // 为什么不能用 x > mid * mid ? oo 明白了,相乘可能会溢出,用除比较安全
13
+ {
14
+ left =mid+ 1;
15
+ last_mid = mid;
16
+ }
17
+ else
18
+ if(x / mid < mid)
19
+ {
20
+ right = mid -1;// 小了就已经得到值了
21
+ }
22
+ else
23
+ return mid;
24
+ }
25
+ return last_mid;
26
+ }
27
+ };
28
+
29
+ Pow
30
+ class Solution {
31
+ public:
32
+ double step(double x,int n)
33
+ {
34
+ if(n == 0)
35
+ return 1;
36
+ double v = step(x,n / 2);
37
+ if(n % 2 == 0)
38
+ return v * v;
39
+ else
40
+ return v * v * x;
41
+ }
42
+ double pow(double x, int n) {
43
+ if (n < 0)
44
+ return 1.0 / step(x,-n);
45
+ return step(x,n);
46
+ }
47
+ };
You can’t perform that action at this time.
0 commit comments