完美的数字1到n

时间:2011-02-21 15:26:12

标签: java if-statement for-loop perfect-numbers

编写一个算法,打印从1到n的完美数字。要确定数字是否完美,请将数字的所有因子加起来,使其小于数字。如果总和等于数字,那就完美了。

import java.util.Scanner;

public class Assign_6 {

    public static void main(String[] args){

        int num,number,sum=0,factor;

        System.out.print("Enter Number");
        Scanner keyboard = new Scanner (System.in);

        number=keyboard.nextInt();

        for (num=1;num<number;num++){
            for(factor=1;factor<number;factor++){
                if(num%factor==0){
                    sum= sum+factor;
                }
                if(sum==num){
                    System.out.println(sum);
                }
                sum=0;
            }

        }
    }
}

输出:24

没有打印出来。不知道什么是错的。我哪里错了?我只能使用while,for和else-if语句。

8 个答案:

答案 0 :(得分:4)

打印出每个数字的总和(而不仅仅是当sum ==数字时),你就能搞清楚了。

(两条线索:正确的缩进有助于快速找到匹配的{}对。并且为变量提供描述性名称是值得的。)

答案 1 :(得分:1)

在纸上追踪您的计划。您的sum变量存在问题。

答案 2 :(得分:1)

您的代码中存在两个问题:

  1. 以下代码应使用小于或等于比较,否则,您会错过n,只会执行1到(n-1)

    for (num = 1;num < number;num++){
    

    应该是以下代码。

    for (num = 1;num <= number;num++){
    
  2. 以下代码位于for(factor=1;...)内,但它应该在循环之外。否则,你实际检查&amp;每个因素都清晰。

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

答案 3 :(得分:0)

当你开始编码以混淆你的循环时,这很容易,因为在这个作业中你有2个循环,他们做不同的事情。作为提示,你的程序无法正常工作的原因是因为你把一个for循环的东西错放到了另一个。

您的方向正确,但请确保您能够分别考虑那些for循环。也就是说,内循环的预期目的是什么?它到底在做什么?什么是外环的预期目的,它实际上在做什么?看起来在你的内循环中,你试图总结num的因子。它实际上只是总结了这些因素,还是你忽略了一些副作用/错误?

答案 4 :(得分:0)

试试这段代码它会对你有所帮助:

import java.util.Scanner;

public class Test
{
   public static void main (String[] args)
   {
       Scanner in = new Scanner(System.in);
       int n = in.nextInt();
       for(int j=1; j<n; j++)
       {
           int counter = 0;
           for (int i = 1; i < j; i++)         
           {              
               if(j%i ==0)
               {
                   counter = counter + i;
               }
           }
           if(counter == j)
               System.out.println(j);//here you can print j or counter
       }
   }
}

答案 5 :(得分:0)

public class PerfectNumber {
public static void main(String args [])
{

    perfectNumber(6,200);
}

static void perfectNumber(int num1, int num2){

    int i; int j; int sum=0;

     for (i=num1;i<=num2;i++){
            for(j=1;j<=i/2;j++){
                if(i%j==0){
                    sum= sum+j;
                }

            }
            if(sum==i){
                System.out.println("The perfect number between two numbers: "+sum);
            } 
            sum=0;
        }


    }

}

答案 6 :(得分:0)

import java.util.*;
    class PerfectNumber

{

public static void main(String[]args)
{
    System.out.println("Enter the number upto which you want to print the perfect number");
    Scanner scan=new Scanner(System.in);
    int n=scan.nextInt();
    for(int i=1;i<=n;i++)
    {
        int sum=0;
        for(int j=1;j<=i;j++)
        {
            if(i%j==0)
            sum=sum+j;
        }
        if(sum==(2*i))  //checks for perfect number
        System.out.println(i);
    }

    }
}

答案 7 :(得分:0)

#include<iostream>
using namespace std;
int main()
{
  int start,end;
  cin>>start>>end;
  for(int j = start;j<=end;j++)
  {
    int div=0;
   for(int i =1;i<j;i++)
  {
    if(j%i == 0)
    {
      div = div+i;
    }
  }
    if(div==j)
    {
      cout<<j<<" ";
    }
  }
 return 0; 
}