这里我编写了代码来打印阿姆斯特朗数字直到某个特定范围。但该程序不会打印该范围内的所有数字。它只打印 1000 范围内的阿姆斯壮数字。这段代码有什么问题?
public static void main(String[] args) {
long N, temp, sum = 0;
Scanner ip = new Scanner(System.in);
System.out.print("Enter the range: ");
N = ip.nextLong();
for (long i = 1; i < N; i++) {
temp = i;
while (temp > 0) {
long rem = temp % 10;
sum = sum + (rem * rem * rem);
temp = temp / 10;
}
if (sum == i) {
System.out.println(" " + i);
}
sum = 0;
}
ip.close();
}
当输入为 100000 时,它只打印
Enter the range: 100000
1
153
370
371
407
最佳答案
根据阿姆斯特朗数的定义,数字中的每一位数字都将被提升到n
,其中 是数字中的位数。
但是您的逻辑没有实现这一点。它仅将数字提高到三次方。
这就是您的代码失败的原因。
给你,使用此代码:
for (long i = 1; i < N; i++) {
temp = i;
int n=Long.toString(i).length();
while (temp > 0) {
long rem = temp % 10;
sum = sum + (long) Math.pow(rem, n);
temp = temp / 10;
}
if (sum == i) {
System.out.println(" " + i);
}
sum = 0;
}
关于java - 阿姆斯特朗数逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46114987/