用一个游戏来说明二分法:
预先给定一个小于100的正整数x,让你猜,猜测过程中给予大小判断的提示,问你怎样快速地猜出来?
先猜50,如果猜对了,结束;如果猜大了,往小的方向猜,再猜25;如果猜小了,往大的方向猜,再猜75;…,每猜测1次就去掉一半的数,就这样可以逐步逼近预先给定的数字。这种思想就是二分法。
现在用二分法来求一个数的算术平方根
package _3_5_test; import java.util.Scanner; import _12_26_test.ten; /* 手动撸一个算术平方根的方法 二分法的实现 */ public class SixtySevenTest { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); long n = scanner.nextLong(); long result = 0; long a = 0; long temp = 0; long b = n; while (a <= b) { // 取出一段数字中间的数字temp temp = (a + b) / 2; // 如果temp的平方等于被平方根的数,那么就是最终的平方根 if (temp * temp == n) { result = n; break; // 如果temp的平方大于被平方根的数,那么将数字的区间范围向左移动一半 } else if (temp * temp > n) { b = temp - 1; // 如果temp的平方大于被平方根的数,那么将数字的区间范围向右移动一半 } else if (temp * temp < n) { a = temp + 1; } } System.out.println(result); } }