A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© youyuxiaoyu 中级黑马   /  2015-10-21 11:31  /  217 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.IOException;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Demo {
        // 创建一个方法get判断该数字是否是完数,若是输出该数
        //第一种方式使用set集合记录每个约数,相加之后与该数本身比较得出结果
        public static void get(int n) {
                Set<Integer> set = new HashSet<Integer>();
                for (int x = 2; x < Math.sqrt(n); x++) {
                        if (n % x == 0) {
                                set.add(x);
                                set.add(n / x);
                        }
                }
                if (set.size() != 0) {
                        int sum = 0;
                        for (Integer in : set) {
                                sum += in;
                        }
                        if (sum + 1 == n) {
                                System.out.print(n + " ");
                        }
                }
        }
//        第二种方式,直接定义一个变量sum,将每个约数直接相加赋值给sum,最后将sum与该数本身比较即可
        public static void decide(int n,StringBuffer sb){
                int sum = 0;
                for (int x = 1; x <= n/2; x++) {
                        if(n % x == 0){
                                sum += x;
                        }
                }
                if(sum == n){
                        sb.append(n).append(" ");
                }
        }

        public static void main(String[] args) throws IOException {
                Scanner sc = new Scanner(System.in);
                int n = sc.nextInt();
                int m = sc.nextInt();
                StringBuffer sb = new StringBuffer();
                for (int i = n; i <= m; i++) {
//                        get(i);
                        decide(i,sb);
                }
                String s = sb.substring(0,sb.length()-1);
                System.out.println(s);
        }
//求1-1000内的完数,运行结果6 28 496
其实求完数并不难,关键是我们没有理解完数的概念。
完数并不是将该数因式分解,将各个因子和1相加等于其本身,
而是将除了自身以外的所有约数相加等于自身。(我之前就在这个位置没理解)
比如28的约数有1、2、4、7、14和28,去除本身28之后,1+2+4+7+14 == 28;
所以28是一个完数

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马