题解 | #完全数计算#

完全数计算

https://www.nowcoder.com/practice/7299c12e6abb437c87ad3e712383ff84

import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
            int num = scanner.nextInt();
            process(num);
        }
    }

    private static void process(int num) {
        // 存在几个完美数
        int count = 0;
        for (int i = 6; i <= num; i++) {
            count = count + getCount(i);
        }

        System.out.println(count);
    }

    // 判断是否是完美数
    private static int getCount(int num) {
        // num的所有约数
        Set<Integer> set = null;
        if (set == null) {
            set = new TreeSet<>();
        }
        for (int i = 1; i <= num / 2; i++) {
            if (num % i == 0) {
                set.add(i);
                set.add(num / i);
            }
        }

        // 去除num自身
        set.remove(num);

        // 约束求和
        int add = 0;
        for (Integer n : set) {
            add = add + n;
        }

        // 清空集合 方便下个数据来
        set = null;

        // 如果约数和加一起等于num 那么num为完美数
        if (add == num) {
            return 1;
        } else {
            return 0;
        }
    }
}

全部评论

相关推荐

投了十几个无人回应
花环鞣: 佬,我隔壁的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务