使用二分法实现一个整数的开平方根

 

 

用一个游戏来说明二分法:

预先给定一个小于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);
    }

}

 

 

posted @ 2020-04-02 17:01  西红柿里没有番茄  阅读(622)  评论(0编辑  收藏  举报