阿姆斯特朗数逻辑错误

时间:2017-09-08 11:02:12

标签: java

这里我编写代码来打印一些特定范围的阿姆斯特朗号码。但是这个程序不会打印范围内的所有数字。它只打印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

1 个答案:

答案 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;
}

Ideone link here.