必须创建列出所有完整数字(因子之和=数字)1 - 1000的程序。
我已经检查了我的代码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;
}
}
}
}
答案 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)
我建议将您的算法分成不同的部分,这样您就可以专注于较小的任务。
i
的因子。获取数字并返回其数组的数组的方法。你可以从更简单的那些开始(提示:2和3),然后可能会搜索一些不完全低效的方法来实现1
答案 3 :(得分:0)
(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);
}
}