给出一个正整数 'num
,写一个函数,要求当这个当num
为完全平方数时函数返回True
,否则返回False。
要求不利用Sqrt函数库。
解法一:
利用 1+3+5+7+9+…+(2n-1)=n^2,即完全平方数肯定是前n个连续奇数的和
我们还可以发现,完全平方数的末位不含2,3,7,8.
bool IsPerfectSquare(int num) { int temp = num % 10; if (!(temp == 0 || temp == 1 || temp == 4 || temp == 5 || temp == 6 || temp == 9)) return false; for (int i = 1; num > 0; i += 2) { num -= i; } if (num == 0) return true; return false; }
解法二
利用二分法求解
bool IsPerfectSquare2(int num) { if (num == 1) return true; int start = 0; int end = num/2; while (start <= end) { //int 范围不够 long temp = (start + end) / 2; if (temp * temp == num) { return true; } if (temp * temp > num) { if (end == temp) { //如果不返回会死循环, return false; } end = (int)temp; } else { if (start == temp) { return false; } start = (int)temp; } } return false; }