关于二分法开根
二分法开方的基本方式:
代码如下
#include<iostream>
using namespace std;
double Sqrt(int n){
int i=0;
for(i=1;i<=1000;i++){
if(i*i<=n && (i+1)*(i+1)>=n){
//n介于i^2和(i+1)^2之间,因此sqrt(n)在i和i+1之间
break;
}
}
double low=i,high=i+1;//sqrt(n)的范围在low和high之间
for(i=1;i<=1000;i++){
//进行1000次二分计算
double mid=(low+high)/2;
if(mid*mid>n)high=mid;
else low=mid;
}
return (low+high)/2;
}
int main(){
int n;
scanf("%d",&n);
printf("%.10lf",Sqrt(n));
}
对于一些常见数字的开方值测试:
2
1.4142135624
--------------------------------
Process exited after 1.635 seconds with return value 0
请按任意键继续. . .
10
3.1622776602
--------------------------------
Process exited after 0.6287 seconds with return value 0
请按任意键继续. . .