计算一个数的平方根,精确到小时候2位
例如:x = 4 res = 2
x = 8 res = 2.82
如果只是简单的计算整数部分,分向上取整和向下取整
向上取整
/**
* 向上取整
* @param x
* @return
*/
public static int helper_up(int x){
int left = 0;
int right = x;
int res = -1;
while (left <=right){
int mid = (left+right) /2;
if (mid * mid > x){
res = mid;
right = mid-1;
}else {
left = mid+1;
}
}
return res;
}
向下取整
/**
*向下取整
* @param x
* @return
*/
public static int helper_down(int x){
int left = 0;
int right = x;
int res = -1;
while (left <=right){ // 只要两者之间的误差大于z ,就继续算
int mid = (left+right) /2;
if (mid * mid > x){
right = mid-1;
}else {
res = mid;
left = mid+1;
}
}
return res;
}
允许误差
/**
* 精确到小数后
* @param x
* @param z 允许的误差
* @return
*/
public static double helper(int x,int z){
double left = 0;
double right = x;
// 允许的误差
double mid = (left+right) /2; // 平方根的答案
while (Math.abs(mid* mid - x ) >= z){ // 只要两者之间的误差大于z ,就继续算
if (mid * mid > x){
right = mid;
}else {
left = mid;
}
mid = (left+right) /2;
}
return mid;
}
重点:
- mid的类型,如果取整就用int,如果算小数就得用double
- while的循环判断条件,当有小数的时候,判断条件就是两者的差得小于误差值