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;
}
}
浙公网安备 33010602011771号