首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Java打印1-100之间的完全数

使用Java打印1-100之间的完全数
EN

Stack Overflow用户
提问于 2019-02-06 00:20:20
回答 6查看 6K关注 0票数 1

我不知道我的代码有什么问题。它应该打印出1-100之间的所有完美数字。我尝试了嵌套的for-loop、do while循环和for-loop。然而,代码似乎是不正确的。

代码语言:javascript
复制
class CompProject1
{

    public static void main()

    {

        int num, sum=0;

        int i;

        for(num=1; num<100; num++)

        {

           for(int j = 1; j<=num ; j++)

           {

               if(num%j==0)

               {

                   sum = sum+j;

                }

            }

           if(sum==num)

           {

             System.out.println(sum);  

            }
        }
    }
}
EN

回答 6

Stack Overflow用户

发布于 2019-02-06 00:33:27

将您的代码更改为:

代码语言:javascript
复制
public static void main(String[] s1) throws Exception {
    int num, sum = 0;
    int i;
    for (num = 1; num < 100; num++) {
        for (int j = 1; j <= num - 1; j++) {   // change made here
            if (num % j == 0) {
                sum = sum + j;
            }
        }
        if (sum == num) {
            System.out.println(sum);
        }
        sum = 0;                              // change made here
    }

}

要点:

  1. sum重置为0完成内部迭代后,在您的内部代码中,您需要检查是否为num - 1而不是num,因为每个数字都可以被自身整除<

>G210for-loop >

票数 1
EN

Stack Overflow用户

发布于 2019-02-06 00:35:24

1)你肯定需要为每一次迭代重置你的sum变量,所以你应该在每次循环中执行int sum = 0;

2)你需要在j <= num/2;的时候迭代!

3)考虑使用Java 8,我将在这里为您编写一些示例。

在这里看我的例子,这是非常漂亮的:

代码语言:javascript
复制
public class PerfectNumbersDemo {

  public static void main(String[] args) {
    IntStream.range(1, 100)
        .filter(PerfectNumbersDemo::isPerfect)
        .forEach(System.out::println);
  }

  private static boolean isPerfect(int number) {
    return number == IntStream.rangeClosed(1, number / 2)
        .filter(i -> number % i == 0)
        .sum();
  }
}
票数 1
EN

Stack Overflow用户

发布于 2019-02-06 00:28:40

您需要:

使用每个循环的

  • sum = 0直到iteration
  • iterate,而不是<= num

下面是固定的代码:

代码语言:javascript
复制
public static void main(String[] args)  {

int sum;
for(int num = 1; num < 100; num++) {

    sum = 0;

    for(int j = 1; j< num; j++) {
        if(num % j == 0) {
            sum += j;
        }
    }

    if(sum == num) {
        System.out.println(sum);
    }
}

}

输出:

6

28

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54538708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档