不用Sqrt,求整数开方问题(精确到0.001)

简介 

      

       创新工厂题,刚开始我是不会做的,而且全没思路。回来度娘了一堆,搜的结果中比较多的是什么牛顿迭代的算法,然后我就没细看了。我就琢磨,创新出这题就为了考这个东西?这样太没劲了吧,然后就搁下了。

昨天偶然看到别人博客上这道题解法,一看就知道做了,非常easy,然后自己按照他说的思路和算法,实践了一遍。

 

       思路:二分法,逐步逼近期望值。

 

       代码实现:

/* 不用Sqrt求整数开方,精确到0.001 */
double NewSqrt(double num)
{
	double temp;
	double low, mid, high;
	double res;
	
	if (num > 1)
	{
		low = 1;
		high = num;
	}
	else
	{
		low = num;
		high = 1;	
	}
	
	while (low <= high)
	{
		mid = low + (high - low)/2.000;
		
		temp = mid*mid;
		if ( (temp - num) < 0.001 && (num - temp) < 0.001)
		{
			res = mid;
			break;
		}
		else if (temp > num)
		{
			high = mid;
		}
		else
		{
			low = mid;	
		}
	}
	
	return res;
}


        另附上原文连接:http://blog.csdn.net/wzy_1988/article/details/11758049



你可能感兴趣的:(结构算法,C/C++)