题解 | #完全数计算#
完全数计算
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;
}
}
}
查看27道真题和解析