zoukankan      html  css  js  c++  java
  • 寻找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

  • 相关阅读:
    VS2008编写MFC程序--使用opencv2.4()
    November 02nd, 2017 Week 44th Thursday
    November 01st, 2017 Week 44th Wednesday
    October 31st, 2017 Week 44th Tuesday
    October 30th, 2017 Week 44th Monday
    October 29th, 2017 Week 44th Sunday
    October 28th, 2017 Week 43rd Saturday
    October 27th, 2017 Week 43rd Friday
    October 26th, 2017 Week 43rd Thursday
    October 25th, 2017 Week 43rd Wednesday
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14000584.html
Copyright © 2011-2022 走看看