给你一个非负整数 x
,计算并返回 x
的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
示例 1:
输入:x = 4 输出:2
示例 2:
输入:x = 8 输出:2
思路1:暴力解题,从0开始循环判断,当前的数是否大于(i*i)并且是否小于(i+1)*(i+1)。
#include <stdio.h>
int mySqrt(int x)
{
for(int i = 0;i < 5000;i++)
{
if((i*i)<=x && (i+1)*(i+1) >= x)
{
return i;
}
}
}
int main()
{
int x;
printf("请输入数字:\n");
scanf("%d",&x);
printf("%d",mySqrt(x));
return 0;
}
思路2: 二分法
#include <stdio.h>
int mySqrt(int x)
{
if(x == 0 || x == 1)
{
return x;
}
int a[x], i = 1;
while(i < x)
{
int y = i + (x - i) / 2;
if(y > x/y)
{
x = y;
}
else
{
i = y + 1;
}
}
return (i - 1);
}
int main()
{
int x;
printf("请输入数字:\n");
scanf("%d",&x);
printf("%d",mySqrt(x));
return 0;
}