假定输入y
是整数,我们用折半查找来找这个平方根。在从0到y
之间必定有一个取值是y
的平方根,如果我们查找的数x
比y
的平方根小,则x2<y,如果我们查找的数x
比y
的平方根大,则x2>y,我们可以据此缩小查找范围,当我们查找的数足够准确时(比如满足|x2-y|<0.00001),就可以认为找到了y
的平方根。
比如求5的平方根x,则x一定满足0<=x<=5,取x为(5+0)/2=2.5,因为2.5的平方为6.25>5,所以x一定小于2.5,也即x满足0<=x<=2.5,取x为1.25,以此类推
Input
第1行输入一个整数n(<100),表示有n个数
从第2行起到第n+1行输入n个整数
Output
输出n个数的平方根,精确到小数点后三位。
#include<iostream>
#include <iomanip>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int num;
cin>>num;
double min=0,max=num,mid=(min+max)/2.0;
while(abs(mid*mid-num)>=0.00001)
{
//cout<<"99"<<endl;
if((mid*mid-num)>0)
{
max=mid;
}
else if((mid*mid-num)<0)
{
min=mid;
}
mid=(min+max)/2.0;
}
cout<<fixed<<setprecision(3)<<mid<<endl;
}
return 0;
}