java一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。(java50道经典编程题)

题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如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,那么就可以保证基本后面的数都不是因子了。所以这就是一个细节,你要问我大神怎么掌握这些细枝末节的东西的,我想说熟能生巧,代码量不够,所以你就写不出好的代码。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值