-1

编写一个算法,打印从 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 语句。

4

8 回答 8

5

打印出每个数字的总和(而不仅仅是当 sum==number 时),您将能够计算出来。

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

于 2011-02-21T15:28:43.523 回答
2

您的代码中有两个问题:

  1. 下面的代码应该使用小于或等于比较,否则,你错过了n,只做 1 到(n-1)

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

    应该是下面的代码。

    for (num = 1;num <= number;num++){
    
  2. 下面的代码在里面for(factor=1;...),但它应该在循环之外。否则,您实际上检查并清除每个因素的总和。

    if(sum==num){System.out.println(sum);} sum=0;} 
    
于 2015-09-17T15:49:58.297 回答
1

在纸上跟踪你的程序。您的 sum 变量存在问题。

于 2011-02-21T15:46:10.243 回答
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
       }
   }
}
于 2014-11-27T10:44:55.823 回答
0

当你开始编码时很容易混淆你的循环,因为在这个作业中你有 2 个 for 循环,它们做不同的事情。作为提示,您的程序无法运行的原因是因为您将一个 for 循环中的东西放错了位置。

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

于 2011-02-22T22:01:28.717 回答
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;
        }


    }

}

于 2016-08-29T06:39:30.627 回答
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);
    }

    }
}
于 2017-04-25T04:57:23.807 回答
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; 
}
于 2020-06-14T05:28:12.357 回答