题目:x的平方根
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
利用牛顿迭代法
#include <math.h>
#include <stdio.h>
double f(double x0, int n)
{
return(x0 * x0 - n);
}
int mysort(int n)
{
double x0, x1;
x1 = 12;
do
{
//然后把x1代入函数中继续求,不断逼近
x0 = x1; //x0为牛顿迭代函数中的点
double y1 = f(x0, n); //计算该点x0的函数值
//然后求在这点的切线方程
//再找这条切线与x轴的交点x1,
x1 = x0 - y1 / (2 * x0);
} while (fabs(x0 - x1) > 1e-8);
long ans = (int)(x1 + 1e-8);
if (ans * ans > n)
--ans;
return ans;
}
int main()
{
int n;
scanf("%d", &n);
int k = mysort(n);
printf("%d\n", k);
return 0;
}