废不多说先放链接。
力扣507完美数https://leetcode-cn.com/problems/perfect-number/题目还是很简单的,思路也很明确,没有特别要说明的点,这一题似乎是学习过程比较经典的题目了,大体上考了循环的知识点还有一些基础语法知识。
代码:
package cn.daycode.leetcode; public class CheckPerfectNumber { public static void main(String[] args) { Solution s = new Solution(); // 测试用例 int ass[] = {28,6,496,8128,2,1,0}; for(int a : ass) { System.out.println(s.checkPerfectNumber(a)); } } static class Solution { public boolean checkPerfectNumber(int num) { int sum = 1; // 从2开始,直到num的开方为止,依次尝试 for(int i = 2; i <= Math.sqrt(num); i++){ // 对i取余为0则是其因数 if(num % i == 0){ int ni = num/i; // 因数是本身则可以结束了 if(ni == i){ sum += i; break; // 否则将两个因数都加到sum上 }else{ sum = sum + i + ni; } } } // 最终判断一下sum是否跟num相等即可 // 要特别注意一下上面的逻辑无法剔除1,1不是完数,这里单独拎出来判断 return num > 1 && sum == num; } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)