Question:
Implement int sqrt(int x)
.
Compute and return the square root of x.
x is guaranteed to be a non-negative integer.
Example 1:
Input: 4 Output: 2
Example 2:
Input: 8 Output: 2 Explanation: The square root of 8 is 2.82842..., and since we want to return an integer, the decimal part will be truncated.
Tips:重写sqrt()函数,使其返回一个int类型的平方跟。
package easy; /* * Implement int sqrt(int x). Compute and return the square root of x. */ public class L69 { public int mySqrt(int x) { //直接调用Math.sqrt,将返回值硬转型为int return (int) StrictMath.sqrt(x); } public int mySqrt2(int x) { //二分的方式,找到x的平方跟。 if (x == 0) return 0; int low = 1; int high = x; while (low <= high) { int mid = low + (high - low) / 2; if (mid == x / mid) { return mid; } else if (mid > x / mid) { high = mid - 1; } else { low = mid + 1; } } return high; } public static void main(String[] args) { L69 l69 = new L69(); int x = 4; int count = l69.mySqrt(2147395599); System.out.println(count); } }
调用Math.sqrt()函数
public class L69 { public int mySqrt(int x) { int ans=(int) Math.sqrt(x); System.out.println(ans); return ans; } public static void main(String[] args) { L69 l69 = new L69(); int x=4; l69.mySqrt(0); } }
注:
①Math.sqrt() 参数为double类型
public static double sqrt(double a) { return StrictMath.sqrt(a); // default impl. delegates to StrictMath // Note that hardware sqrt instructions // frequently can be directly used by JITs // and should be much faster than doing // Math.sqrt in software. }
②StrictMath.sqrt (文档中说 使用StrictMath.sqrt比使用Math.sqrt更快)
/** * Returns the correctly rounded positive square root of a * {@code double} value. * Special cases: * <ul><li>If the argument is NaN or less than zero, then the result * is NaN. * <li>If the argument is positive infinity, then the result is positive * infinity. * <li>If the argument is positive zero or negative zero, then the * result is the same as the argument.</ul> * Otherwise, the result is the {@code double} value closest to * the true mathematical square root of the argument value. * * @param a a value. * @return the positive square root of {@code a}. */ public static native double sqrt(double a);
③事实证明 Math比StrictMath更快:
Math----------2ms
public int mySqrt(int x) { return (int) Math.sqrt(x); }
StrictMath---------4ms
public int mySqrt(int x) { return (int)StrictMath.sqrt(x); }