您的位置:首页 > 移动开发 > 微信开发

java练习题,每天一个java小程序-9

2013-07-03 17:37 218 查看


JAVA练习题,能做多少就做多少。http://bbs.csdn.net/topics/110067294

这个是从CSDN看到的。每天一个吧 。

【程序9】

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。

还是套用以前的程序

==== Main.java ====

package main;

import dec.DecNum;

public class Main {

public static void main(String[] args) {
int i;

for (i = 4; i < 1000; i++) {
DecNum num = new DecNum(i);
num.decNum();
if (num.check_perfect()) {
System.out.println(i);
}
}
}
}

==== DecNum.java ====

package dec;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class DecNum {
public DecNum(int num) {
this.num = num;
if (primeList == null) {
primeList = new ArrayList();
primeList.add(2);
primeList.add(3);
initPrimeList();
}
}

private static void initPrimeList() {
int i;
boolean isPrime = true;

for (i = 3; i <= 1000; i++) {
Iterator it = primeList.iterator();
while (it.hasNext()) {
int tmp = (int) it.next();
if ((i % tmp) == 0) {
isPrime = false;
break;
}
}

if (isPrime) {
primeList.add(i);
} else {
isPrime = true;
}
}

}

public void decNum() {
Iterator it = primeList.iterator();
int num = this.num;

if (decNumList == null) {
decNumList = new ArrayList();
}

while (it.hasNext()) {
int tmp = it.next();
while ((num % tmp) == 0) {
decNumList.add(tmp);
num = num / tmp;
}
}
decNumList.add(num);
}

public void printDecNum() {
Iterator it = decNumList.iterator();

while (it.hasNext()) {
int tmp = it.next();
System.out.println(tmp);
}
}

public boolean check_perfect() {
Iterator it = decNumList.iterator();
int value = 0;

while (it.hasNext()) {
value += it.next();
}

if (value == num) {
return true;
} else {
return false;
}
}

private int num;
private List decNumList;
private static List primeList;
}

这个DecNum和之前的基本一样,不过有小改动。这个程序跑完结果只有6,感觉这个题目出的不好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: