问题描述:
We define the Perfect Number is a positive integer that is equal to the sum of all its positive divisors except itself.
Now, given an integer n, write a function that returns true when it is a perfect number and false when it is not.示例:
Input: 28 Output: True Explanation: 28 = 1 + 2 + 4 + 7 + 14 Note: The input number n will not exceed 100,000,000. (1e8)问题分析:
我们考虑用循环遍历的方法求解,尽量减少循环次数,过程详见代码:
class Solution { public: bool checkPerfectNumber(int num) { int low = sqrt(num); int high; int res = 0; while(low > 0) { high = num / low; if(low * high == num) { res = (high == num) ? res + low : res + low + high; } low--; } return res == num && num != 1 && num != 0; } };