leetcode69.x的平方根

1.题目

实现 int sqrt(int x) 函数。

计算并返回x的平方根,其中x是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

2.解题思路

首先看题目找到题目关键词平方根,第一反应是想到了平方根的固有的函数sqrt,所以我们开始想别的办法,来进行解决。一个数的平方根是什么,就是两个相同的数字相乘等于那个数,所以可以把这个作为条件去进行考虑;接着思考怎么得到两个相同的数字,既然有了条件我们可以想到利用循环来得到那两个相同的数字;首先定义一个数,这里要再进一步考虑到有些平方根是小数,所以我们使用长整型来定义

int mySqrt(int x)
{
      long i;

定义结束我们开始写循环部分的代码,x是非负整数,所以i从0开始,接着条件就是两个相同的数字相乘等于那个数,条件限制使i慢慢变大,因此

for(i=0;i*i<x;i++)
{
}

for写完必须要添加一对大括号,这里非常容易遗忘,由于这个for的循环是使i变大,它就会有个循环过程,确保能够进行。

接着我们开始考虑返回部分,慢慢的我们可以代入具体数字来找到规律,当 x 等于4时,平方根是2;接着 x 等于 5 ,平方根是根号五,也就是 2.236067977 ,去掉小数部分就是2,当把这代入循环时再考虑一下,当 x 等于 4 时,i 从 0 开始,0 * 0 < 4,i 变成 1 ,接着循环,1 * 1 < 4,i 变成 2,发现 2 * 2 等于 4 ,所以我们在for循环后面还要添加一个等于的条件,结果可以直接返回为 i 。

if( i * i == x )
{
     return i;
}

接着代入当 x 等于 5 时,i 从 0 开始,0 * 0 < 5,i 变成 1 ,接着循环,1 * 1 < 5,i 变成 2,接着循环,2 * 2 < 5,i 变成 3 ,接着进行,3 * 3 > 5,无法进行下去,所以按照五原本输出的平方根是2,我们最终得出返回 i 减去 1 。

else
{
      return i - 1;
}

3.代码

int mySqrt(int x)
{
      long i;
for(i=0;i*i<x;i++)
{
}
if( i * i == x )
{
return i;
}
else
{
return i - 1;
}
}

 

posted on 2019-07-25 09:34  &+¥  阅读(100)  评论(0)    收藏  举报

导航