X的平方根(二分)
设计函数int sqrt(int x)
,计算 xx 的平方根。
输入格式
输入一个 整数 xx,输出它的平方根。直到碰到文件结束符(EOF
)为止。
输出格式
对于每组输入,输出一行一个整数,表示输入整数的平方根。
样例输入
1 2 3 4 5 6 7 8 9
样例输出
1 1 1 2 2 2 2 2 3
分析:牛顿迭代法
牛顿迭代法求平方根,主要是利用二次函数上的点的切线,与x轴的交点,然后再用x对应的函数图像上的点,做切线,不断的迭代,知道满足一个指定的精确度。
迭代公式
(x0 + a/x0)/2
1 #include <iostream> 2 #include <cmath> 3 #include <cstdio> 4 using namespace std; 5 6 int sqrt(int x){ 7 double t = 1.0; 8 while(fabs(t * t - x) > 1e-6){ 9 t = (t + x / t) / 2; 10 }//牛顿迭代法 11 return t; 12 } 13 14 int main(){ 15 int x; 16 while(scanf("%d", &x) != EOF){ 17 printf("%d\n",sqrt(x)); 18 } 19 return 0; 20 }
永远渴望,大智若愚(stay hungry, stay foolish)