版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1434839
本次周赛主要分为以下4道题:
Problem:
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.
Example:
Input: 28 Output: True Explanation: 28 = 1 + 2 + 4 + 7 + 14
Note
The input number n will not exceed 100,000,000. (1e8)
没有什么难度的题,思路在题目中已经给你了,无非是在遍历条件上做点思考。
public boolean checkPerfectNumber(int num) {
//边界条件
if(num == 0 || num == 1) return false;
//第二部分
int sum = 1;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0){
sum += i + num / i;
}
}
return sum == num;
}
注意一些细节,Perfect Number不能由它自己组成,所以排除0和1。num由两个相乘的数分解,所以遍历时只需要遍历num−−−−√\sqrt {num}个数即可,所以遍历条件为i*i <= num
,注意等于号。