这里我编写代码来打印一些特定范围的阿姆斯特朗号码。但是这个程序不会打印范围内的所有数字。它只打印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
答案 0 :(得分:2)
根据阿姆斯壮数字的定义,数字中的每个数字都会被提升到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;
}