题目:
一个数如果恰好等于它的因子之和,这个数就称为
"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
程序设计:
根据定义,要找出1000之内的完数,需要将循环控制在1到1000,然后再判断这个数是不是完数(先求出这个数的所有因子,将这些因子相加得到的和与该数进行比较,如果相等就证明这个数是完数)
代码:
import java.util.Scanner;
import org.junit.Test;
public class PerfectNumber {
//动态的求某个数之内的完数,这个数根据用户自己来输入
public String getPerfectNumber(int m) {
//定义一个变量来记录结果
StringBuffer result = new StringBuffer();
result.append(m).append("之内的完数是:");
//外循环控制要求的完数在哪个范围
for(int i = 1 ; i <= m ; i ++) {
//定义一个变量记录当前数的因子和
int tempSum = 0;
//内循环用来求当前数的所有因子和
for(int j = 1 ; j < i / 2 + 1 ; j ++) {
if(i % j == 0) {
tempSum += j;
}
}
//判断因子和是否和该数相等,相等则是完数
if(tempSum == i) {
result.append(i).append(" ");
}
}
return result.toString();
}
//测试方法
@Test
public void test() {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
sc.close();
String perfectNumber = getPerfectNumber(m);
System.out.println(perfectNumber);
}
}