"对于"循环和完美的数字

时间:2014-06-09 20:56:55

标签: java loops for-loop perfect-numbers

必须创建列出所有完整数字(因子之和=数字)1 - 1000的程序。

  • 这是一个java类,只需要使用“for”循环

我已经检查了我的代码100次并且没有输出,我在某个地方错过了一个逻辑错误,有人可以帮助我吗?

public static void main(String[] args)
{
  // variables
  int total = 0;
  final int LIMIT = 1000;

  // for loop to test all numbers 1-1000
  for(int i = 1; i <= LIMIT; i++)
  {
    // if statement
    if((i != 1) && (total == i - 1))
    {
      // prints perfect number
      System.out.println((i - 1) + " is a perfect number");
      // resets total value
      total = 0;
    }
    // gets and add factors as total
    for(int divider = 1; divider < i; divider++)
    {
      if((i % divider) == 0)
      {
        total += divider;
      }
    }
  }
}

6 个答案:

答案 0 :(得分:4)

如果您找到一个完美的号码,那么您唯一的问题就是只能重置total。如果您找不到完美的数字,则继续为旧的总数添加下一个数字的除数。您需要为每个i开始新鲜事。

按以下方式重新安排程序应该会有所帮助:

public static void main(String[] args) {
    final int LIMIT = 1000;
    for (int i = 0; i <= LIMIT; i++) {
        // Declare total here, inside the loop, so values from previous
        // iterations are discarded.
        int total = 0;
        for (/* your code here */) {
            // add up divisors
            // your code here
        }
        // compare to i, rather than always computing the total for the
        // previous number and comparing to that.
        if (/* your code here */) {
            // print output
            // your code here
        }
    }
}

答案 1 :(得分:2)

您应该将total = 0;移到if语句之外。你的总数正在增加,永远不会被重置。

答案 2 :(得分:0)

我建议将您的算法分成不同的部分,这样您就可以专注于较小的任务。

  1. 查找数字i的因子。获取数字并返回其数组的数组的方法。
  2. 汇总因素。一个采用数组并返回它的简单方法。
  3. 主循环:只检查sum(因子(i))== i
  4. 你可以从更简单的那些开始(提示:2和3),然后可能会搜索一些不完全低效的方法来实现1

答案 3 :(得分:0)

当你以total = 0和i&gt; 1开始时,

(total == i - 1)永远不会匹配。

答案 4 :(得分:0)

你很亲密。只需稍微重新评估一下你的逻辑。

public static void main(String[] args) {
        // variables
        int total = 0;
        final int LIMIT = 1000;

        // for loop to test all numbers 1-1000
        for (int i = 1; i <= LIMIT; i++) {

            // gets and add factors first
            for (int divider = 1; divider < i; divider++) {
                if ((i % divider) == 0) {
                    total += divider;
                }

            }

            // then check if sum == number
            // also just print i instead of - 1
            if ((i != 1) && (total == i)) {
                // prints perfect number
                System.out.println((i) + " is a perfect number");

            }

            // alway reset when we are done with a number
            total = 0;

        }

    }

答案 5 :(得分:0)

 for(int i=1;i<1000;i++)
    {
        int k=0;

        for(int j=1;j<i;j++)
        {
            if(i % j==0)
            {   
                k+=j;
            }

        }
        if(k==i)
        {
            System.out.println(k);
        }
    }