zoukankan      html  css  js  c++  java
  • 平方根——各个击破

    标题叙述性说明:

    无需sqrt(x)库函数。为了实现平方根。


    解题思路:

    採用二分法

    假定要求数num的平方根,那么首先取1~num之间的中点mid。

    若 mid * mid > num,那么 根在 1~mid-1之间。

    若 mid * mid < num,那么根在 mid+1~num 之间。

    若 mid * mid == num,直接输出 mid;

    因为整数int求平方根是向下取整。所以。若mid * mid < x情况下,根可能是mid. 根据上面如果根在mid+1~num之间,那么mid+1~num之间的全部跟都大于num。

    所以在退出的时候要处理一下。

    <span style="font-size:18px;">if (min*min > num)
      return min - 1;
    else 
      return min;</span>


    參考代码:

    <span style="font-size:18px;">class Solution{
    
    public:
    	int getSqrt(int num)
    	{       if(num <= 0) return 0;
    		int min = 0;
    		int max = num;
    		int mid = (min + max) / 2;
    		int mark = 0.001;
    		while (min <= max)
    		{
    			if (mid*mid == num)
    				return mid;
    			else if (mid*mid < num)
    				min = mid+1;
    			else
    				max = mid-1;
    			mid = (min + max) / 2;
    		}
    		if (min * min > num) return min - 1;
    		else return min;
    	}
    };</span>


    代码2:考虑精度预计个数约等于num的平方根。精度自己定义,相同使用二分法。

    float getSqrt(int num, float epsilon)
    {
            if(num <=0) return 0;
    	float low, high, maymid;
    	low = 0;
    	high = max(1, num);
    	maymid = (low + high) / 2.0;
    	while (abs(maymid*maymid - num)>epsilon)
    	{
    		if (maymid * maymid == num)
    			return maymid;
    		if (maymid*maymid<num)
    			low = maymid;
    		else
    			high = maymid;
    		maymid = (low + high) / 2.0;
    	}
    	return maymid;
    }


    參考资料:

    http://blog.csdn.net/tosslee/article/details/6998448

    http://blog.csdn.net/u012162613/article/details/41361655

  • 相关阅读:
    Linux安装telnet
    linux 打压缩包
    JAVA读写文件
    LINUX安装NGINX
    Linux安装JDK
    java判断字符串中是否包含中文 过滤中文
    操作MySQL
    Java序列化对象-字符串转换
    nginx
    linux操作命令
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4855469.html
Copyright © 2011-2022 走看看