题解 | #完全数计算#
完全数计算
http://www.nowcoder.com/practice/7299c12e6abb437c87ad3e712383ff84
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int scope = sc.nextInt();//输入一个数scope,寻找2~scope范围内的完美数
int count = 0;
for(int mayBePerfect=2; mayBePerfect<=scope; mayBePerfect++){//从2开始一个个测试(累加它的所有约数)看是否完美
if(testPerfect(mayBePerfect)){
count++;
}
}
System.out.println(count);
}
sc.close();
}
public static boolean testPerfect(int mayBePerfect){//测试给定的1个参数(数字),累加它的所有约数,看是否完美
int sum = 1;
for(int diviser=2; diviser<=mayBePerfect/2; diviser++){//找出所有约数,并累加。约数最大不会超过一半,所以找到中间1/2就行了。
if(mayBePerfect % diviser == 0){//如果j能整除i,那么j是约数
sum += diviser;//每个约数累加
}
}
//所有约数相加完毕
if(sum == mayBePerfect){
// System.out.println(mayBePerfect);
return true;
}
else{
return false;
}
}
}