二分法开方的基本方式:
代码如下
#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
请按任意键继续. . .
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.cnblogs.com/jisuanjizhishizatan/p/16026167.html
内容来源于网络,如有侵权,请联系作者删除!