leetcode 367题:给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
遇到了如下问题:(long)(middle * middle)就会报越界,而(long)middle * middle就不会,求帮忙解答,不胜感激!!代码如下:
class Solution {
public:
bool isPerfectSquare(int num) {
if(num == 1)
{
return true;
}
int left = 0;
int right = num;
while(left <= right)
{
int middle = left + (right - left) / 2;
if((long long)(middle * middle) < num)
{
left = middle + 1;
}
else if((long long)middle * middle > num)
{
right = middle - 1;
}
else
{
return true;
}
}
return false;
}
};
运行结果及报错内容
执行出错信息:
Line 15: Char 35: runtime error: signed integer overflow: 1000052909 * 1000052909 cannot be represented in type 'int' (solution.cpp)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:24:35
最后执行的输入:
2000105819