问题描述:给定任意一个正数,要求我们求出它的平方根,最终所求结果要求精度达到1E-6
本题可以用二分查找的方法进行求解。思路如下
(1)首先要判断输入的正数n是否大于1,因为如果n < 1,则其平方根 的范围是(n,1)
(2)如果输入的正数n是一个大于等于1的数,则其平方根的范围是[1,n)
基于以上分析,代码实现如下:
/*
* Copyright: (c) 2019
*
* 文件名称: Solve_SquareRoot.cpp
* 文件标识:
* 摘 要:
*
* 版 本: 1.0
* 作 者: RF_LYF
* 创建日期: 2019/4/18 14:48
*/
#include <stdio.h>
double SolveSqroot(double n)
{
double precision = 0.0000001;
double square = 0.0;
double mid = 0;
double low = 0.0;
double high = 0.0;
if(n < 1)
{
low = n;
high = 1;
}
else
{
low = 1;
high = n;
}
while(high - low >= precision)
{
mid = low + (high - low)/2;
if(mid * mid == n)
return mid;
else if(mid * mid < n)
low = mid;
else
high = mid;
}
return low;
}
int main()
{
double InputNum = 0;
while(scanf_s("%lf", &InputNum) && InputNum)
{
printf("%lf%s%lf\n", InputNum, "的平方根为:", SolveSqroot(InputNum));
}
return 0;
}