给你一个正整数 num
。如果 num
是一个完全平方数,则返回 true
,否则返回 false
。
完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。
不能使用任何内置的库函数,如 sqrt
。
class Solution {
public boolean isPerfectSquare(int num) {
int i=0,j=num;//这里必须是num,如果这个数是1,如果是num-1,就运行错误
while(i<=j){
int middle=(i+j)>>>1;
if((long)middle*middle>num){//int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况
//整数的计算结果可能超出int数据类型的范围时使用
j=middle-1;
}else if((long)middle*middle<num){//这里没有进行转换也没有报错,前面那个是大于,大的话可能会大很多,其实小于不大会存在溢出问题,都比这个数小了咋溢出
i=middle+1;
}else{
return true;
}
}
return false;
}
}