当前位置: 首页 > 知识库问答 >
问题:

找出两个数字之间的完美数字

微生高谊
2023-03-14

我是Java新手,为了练习,我在互联网上找到了一项任务:

"在你输入的两个数字之间找到所有完美的数字。"

顺便说一下——一个完美的数字是一个自然数,等于它所有除数的和。所以我开始工作,遇到了这样一个问题,当我输入两个数字时。

例如:1100,我在控制台中得到正确答案:6,28。但是,如果第一个数字是,例如,100,第二个是500,我会将此输出输出到控制台:6,28496,,而我应该只得到496。也就是说,出于某种原因,最小值不会缩短对完美数的搜索。

这就是我的结局:

import java.util.Scanner;

public class IsPerfect {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int min = in.nextInt();
        int max = in.nextInt();

        System.out.println(min +" to "+max+" perfect numbers:");
        for (min = 1; min <= max; min++) {
            int sum = 0;
            for (int e = 1; e < min; e++) {
                if ((min % e) == 0) {
                    sum += e;
                }
            }

            if (sum == min) {
                System.out.print(sum+ ",");
            }
        }
    }
}

如果有人对如何纠正这个错误有任何建议,我将不胜感激。

共有3个答案

聂宜
2023-03-14

让我给你一个建议:Java中的整数定义如下:

  • int 4字节:从-2147483648到2147483647

当一个完全数是正数时,你只需要考虑从0到2147483647的数,它们并不常见:

沈良策
2023-03-14

我想这就是重点。

import java.util.Scanner;

public class IsPerfect {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in); 
        
           int min = in.nextInt();
           
           int max = in.nextInt();
        
           System.out.println(min +" to "+max+" perfect numbers:");
        for (int i = min; i <= max; i++)  
            {  
                int sum = 0;  
                for (int j = 1; j < i; j++)  
                {  
                    if (i % j == 0)  
                        sum = sum + j;  
                }  
                if (sum == i)  
                    System.out.println(i+", ");  
            }

    }

}
齐承运
2023-03-14

无论用户输入什么,您都将最小值分配给1。更改外部for循环,从用户输入的最小值开始:

import java.util.Scanner;

public class IsPerfect {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int min = in.nextInt();
        int max = in.nextInt();

        System.out.println(min +" to "+max+" perfect numbers:");
        for (; min <= max; min++) {
            int sum = 0;
            for (int e = 1; e < min; e++) {
                if ((min % e) == 0) {
                    sum += e;
                }
            }

            if (sum == min) {
                System.out.print(sum+ ",");
            }
        }
    }
}
 类似资料:
  • 问题内容: 它给出以下内容: 但是我想获得下个月的定义,该怎么办? 问题答案: 表达方式 给。我们期望这两个值都指向每月的最后几天。如果将1天添加到值中,我们将获得下个月的第一天, 会给我们1个月的预期时间。因此,让我们检查是否有一个月的最后两天,在这种情况下,我们要返回第二天的年龄间隔。在其他情况下,我们将返回原始值的年龄间隔: 一些例子:

  • 我只是在玩一些代码,我似乎不明白我哪里出错了。 我有一个“数字”字段,存储01-20之间的数字,后跟一个字母。我已经创建了一个局部变量,将前2个数字存储为字符串,但如果范围在01-20之间,我似乎无法使范围返回真。注意00不是有效的数字。 有什么想法吗?

  • 我正在我的大学课程中研究一个简单的JAVA问题。我被这个节目难住了。我将展示我到目前为止所拥有的,并给出我必须回答的问题。我也在StackOverflow上看了一个类似的问题,但它不是同一个问题,所以没有帮助。我需要编写的程序是: 编写一个使用“while”循环执行以下步骤的程序: a、 )提示用户输入两个整数:“firstNum”和“secondNum”(firstNum必须小于secondNu

  • 问题内容: 如何使用PHP查找两个日期之间的天数? 问题答案:

  • 我正在尝试解决此问题: 一位物理教授给班上的学生做项目。学生们必须组成一个两人小组来做这个项目。教授让学生来决定队伍。一个班级的学生人数将是偶数。 每个学生都有自己的知识水平。它告诉每个学生有多少知识。一个团队的知识水平是两个学生知识水平的总和。 学生们决定组成小组,这样知识最高的团队和知识最低的团队之间的差异就最小了。 投入 输入的第一行将包含测试用例的数量t;在接下来的t行中,第一个数字是n,

  • 本文向大家介绍查找两个数字的GCD,包括了查找两个数字的GCD的使用技巧和注意事项,需要的朋友参考一下 在数学中,最大公约数(GCD)是最大可能的整数,该整数将两个整数相除。条件是数字必须为非零。 我们将遵循欧几里得算法来找到两个数字的GCD。 输入输出 算法 输入:两个数字a和b。 输出: a和b的GCD。 示例 输出结果