寻找x之内(包含本身)的完全数 Java

  • 寻找完全数 

题目描述

一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子:

输入

N

1=<N<=30000

输出

? its factors are ? ? ?

样例输入

1000

样例输出

6 its factors are 1 2 3 
28 its factors are 1 2 4 7 14 
496 its factors are 1 2 4 8 16 31 62 124 248 

解题思路: 先求因子数 但这道题的因子很显然没有本身 且 因子不可能超过自己的一半 那么我们就直接循环 i / 2次就好了, 再循环里:累加因子的值 如果累加的值 等于本身 那么他就是完全数 此时要注意的是 判断累加因子值是否等于本身 这个判别式要放在内循环外 因为如果不放 就会有 “24”BUG  因为24的因子有  “24 its factors are 1 2 3 4 6 8 12”
如果你放在内循环里 就判断到1 2 3 4 6 8 就会等于24  显示24 是完全数  其实24并不是完全数  因为后面有个 12 ,这个BUG值得去学习。代码如下:认真看注释:

import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt(),sum = 0; //num代表求num以内的值,sum代表累加因子数
        String str = " its factors are";    //定义字符串 作 ”中介”
        for(int i = 1;i<=num;i++) {         //循环num此
            str = " its factors are";       //每次循环前 让str回到初始值
            sum=0;                         //每次循环前 让sum回到初始值
            for (int j = 1; j <= i / 2; j++) {  //循环 i/2次 因为因子不可能超过自己本身一半(除了本身)
                if (i % j == 0) {               //判断j是否是因子数
                    sum += j;                   //累加j(因子)的值
                    str += (" " + j);           //把因子前面加空格 并 转换成字符串 累加到str中
                    }
            }
            if (sum == i) {                     //注意这一步!为什么不放在内循环里面 因为放在内循环里面会出现24 BUG,即求出所有因字数后再判断
                System.out.println(i + str);          //输出i(完全数)+str(累加的str)
            }
        }
    }

}

完。

本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14000584.html

原文地址:https://www.cnblogs.com/bi-hu/p/14000584.html