完美数字显示Java
我有以下的作业问题 如果一个数等于除其自身之外的所有因子之和,那么它就是一个完美数。例如,6是一个完美的数字,因为6=1+2+3 编写一个程序,获取一个输入数字,并显示包括该数字在内的所有完整数字 这就是我目前所拥有的完美数字显示Java,java,Java,我有以下的作业问题 如果一个数等于除其自身之外的所有因子之和,那么它就是一个完美数。例如,6是一个完美的数字,因为6=1+2+3 编写一个程序,获取一个输入数字,并显示包括该数字在内的所有完整数字 这就是我目前所拥有的 import java.util.*; public class perfectnumbers { public static void main(String[] args){ Scanner console = new Scanner(System.in);
import java.util.*;
public class perfectnumbers
{
public static void main(String[] args){
Scanner console = new Scanner(System.in);
int externalNumber;
int internalNumber;
int internalTotal = 0;
System.out.println("Input Number");
externalNumber = console.nextInt();
while (externalNumber > 0) {
internalNumber = externalNumber;
while (internalNumber > 0) {
internalNumber = internalNumber - 1;
internalTotal = internalNumber + internalTotal;
}
if (internalTotal == externalNumber) {
System.out.println(internalTotal);
}
externalNumber = externalNumber - 1;
internalTotal = 0;
}
}
}
但由于某种原因,当我输入一个数字时,只输出3。。。有人能帮忙吗?你从不检查因素。这样做:
while (externalNumber > 0) {
internalNumber = externalNumber-1; //Make sure to subtract one here
while (internalNumber > 1) { //Change this to 1 so you don't divide by 0
internalNumber = internalNumber - 1;
if (externalNumber%internalNumber==0){ //Check for factor
internalTotal = internalNumber + internalTotal;
}
}
if (internalTotal == externalNumber) {
System.out.println(internalTotal);
}
externalNumber = externalNumber - 1;
internalTotal = 0;
}
完美数字(像其他完美的东西一样)是非常稀少的
它们是(在int
范围内):
(使用long
时,仅剩下三个8589869056、137438691328、2305843008139952128
)
因此,您可以这样实现它:
private static int[] perfectNumbers = new int[] {
6, 28, 496, 8128, 33550336
};
private static void displayPerfects(int upTo) {
for (int item : perfectNumbers)
if (item > upTo)
break;
else {
System.out.print(item);
System.out.println();
}
}
...
public static void main(String[] args) {
...
System.out.println("Input Number");
...
externalNumber = console.nextInt();
...
displayPerfects(externalNumber);
}
请注意,在您的情况下,效率确实很重要,例如,如果您被给予,比如说,
2000000000
,需要多长时间?你所要做的就是最多测试五个值。你试过调试这个问题吗?是的,我试过了,每个数字只给我3,只有3。你在哪里检查它是否是一个因子?哦,等等@gonzo Im dumb我没有做因子,我只是减去了thanxin有趣的问题:注意效率(“…显示所有完美的数字…”)在这里真的很重要。如果我们被给予,比如说,2000000000
(高达20亿),效率在这个问题上很重要:想象一下,你被给予,比如说,2000000000
——程序需要多少时间来“显示所有完美的数字,包括那个数字”?您已根据问题要求修改了错误more@DmitryBychenko是的,我同意。我只是回答OP的问题,为什么“只有3个被输出…”嗨,Dmitry,我是落选者(我回复了它)。你的答案很完美,但OP的要求涉及家庭作业,我认为你的解决方案超出了作业的教学目的。干杯。@Andrea:正如我所看到的,家庭任务致力于基本因子分解,而被接受的解决方案必须总结因子。然而,在实践中,由于效率的原因,我们不应该以这种方式实施(10亿美元的投入将永远冻结整个系统)。所以我不认为我破坏了乐趣:我已经给出了测试的参考代码,展示了工作,即实际解决方案,但还没有完成家庭作业(我怀疑我的程序是否会被接受)。是的,我明白你的意思,我同意效率方面的观点!事实上,我认为这种请求也不适合课堂作业。
private static int[] perfectNumbers = new int[] {
6, 28, 496, 8128, 33550336
};
private static void displayPerfects(int upTo) {
for (int item : perfectNumbers)
if (item > upTo)
break;
else {
System.out.print(item);
System.out.println();
}
}
...
public static void main(String[] args) {
...
System.out.println("Input Number");
...
externalNumber = console.nextInt();
...
displayPerfects(externalNumber);
}