69. x 的平方根

69. x 的平方根

https://leetcode-cn.com/problems/sqrtx/description/

package com.test;

/**
 * @Author stono
 * @Date 2018/8/24 下午5:48
 */
public class Lesson069 {
    public static void main(String[] args) {
        int x = 2147395600;
//        System.out.println(Math.sqrt(Integer.MAX_VALUE));
//        x = 81;
        int i = mySqrt(x);
//        x = 4;
//        while (x * x > 0) {
//            System.out.println(x * x);
//            x = x*4;
//        }

        System.out.println(i);
//        System.out.println(i*i);
//        System.out.println(46341*46341);
    }

    public static int mySqrt(int x) {
        if (x == 0) {
            return 0;
        }
        int i = 1;
        int k = 4;
        while (k > 0) {
            // i的平方小于x,并且i小于最大整数的平方根
            while (i * i <= x && i<=46340) {
                // k>1的时候,就进行相乘,加快逼近的步伐,乘以4已经很快逼近了;
                if (k > 1) {
                    i = i * k;
                }else{
                    // k==1的时候,就累加i进行逼近
                    i = i+1;
                }
            }
            i = i / k;
            // 4倍超过了,改3倍,改2倍,最后变成1;
            k--;
        }
        return i - 1;
    }
}