编写一个算法,打印从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语句。
答案 0 :(得分:4)
打印出每个数字的总和(而不仅仅是当sum ==数字时),你就能搞清楚了。
(两条线索:正确的缩进有助于快速找到匹配的{}对。并且为变量提供描述性名称是值得的。)
答案 1 :(得分:1)
在纸上追踪您的计划。您的sum变量存在问题。
答案 2 :(得分:1)
您的代码中存在两个问题:
以下代码应使用小于或等于比较,否则,您会错过n
,只会执行1到(n-1)
for (num = 1;num < number;num++){
应该是以下代码。
for (num = 1;num <= number;num++){
以下代码位于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;
}