C++判断平方数问题求答疑解惑

问题遇到的现象和发生背景

img

用代码块功能插入代码,请勿粘贴截图
我想要达到的结果

不太理解 求解答

哪部分不理解啊?就是折半查找啊。

首先明确平方数的概念:如果一个正整数的开方是还是整数,那么他就是一个完全平方数如 4 16 25 等等,
故我们可以从对这个数x进行二分,边界界定在 【1,x】
即 初始时,left = 1, right = x
循环条件 是while(left < right)
每次令 mid = (left + right + 1)/ 2(不加 1,当left = 0,right = 1 时,会无限循环)
然后 check 一下 是否(long long) mid * mid <= x(因为x是最大上限值),加long long 是为了防止数值过大爆 int 值
1.若 满足这一条件,则 left = mid(因为mid 可能也是答案)
2. 若不满足,则right = mid - 1

另外这是个整数二分的例子,可以找篇文章看一下二分的知识