题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。
对于这道题其实乍一看可能觉得比较困难,但是你只要,知道一个问题作为求因子,只需要从1开始让你输入的这个数一直除就好了,记得每回合要+1。找出这个数的全部因子。然后加起来和这个数比较一下看看是否相等,如果相等的话就可以了,注意一定不要在因子中把自己也算上,要除去这个数本身,有了思想就可以上代码了:
//找出完数
public class Complete_number {
public static void main(String [] args) {
for(int i = 1;i<=1000;i++) {
int num = 0;
for(int j = 1;j<i;j++) {
if(i%j == 0) {
num += j;
}
}
if(i == num) {
System.out.println(i+"是完数");
}
}
}
}
老规矩看完了我的代码我们再来看一下大神代码:
public static void no9() {
for(int i = 2;i < 1000;i++) {
//判断i是不是完数
int num = 0;
for(int j = 1;j <= i/2;j++) {
//找因子
if(i % j == 0) {
num += j;
}
}
if(i == num) {
System.out.println("完数有"+i);
}
}
}
如果你是抱着学习的态度来的,并且仔细的看完了这两段代码你会发现一个问题。在二次循环中我的代码跑了i次,而大神的代码则跑了i/2次,这是一个和前面求质数题一样的细节,当我们循环到一个数的1/2,那么就可以保证基本后面的数都不是因子了。所以这就是一个细节,你要问我大神怎么掌握这些细枝末节的东西的,我想说熟能生巧,代码量不够,所以你就写不出好的代码。