首页 > 解决方案 > 在java中查找阿姆斯特朗数

问题描述

我找到了所有这些数字,但我不明白为什么在我的代码中,循环的方向决定了一切 当他从 9999 到 100 时,他不计算小于 1000 的数字 当循环从 100 到 9999 时,一切从头到尾工作......有效的代码:

public class Main {
    public static void main(String[] args){
        int n  , po = 0, count = 0;
        double arm;
        int[] elems = {0,0,0,0};
        for(int i = 100; i < 9999; i++){
            for( n = i;n >= 1; count++){
                elems[count] = n%10;
                n /= 10;
                po++;
            }
            arm = pow(elems[0],po)+pow(elems[1],po)+pow(elems[2],po)+pow(elems[3],po);
            if(arm == i ){
                System.out.println(i);
            }
            po = 0;
            count = 0;
        }
    }
}

输出:

153
370
371
407
1634
8208
9474

以及不起作用的代码:

public class Main {
    public static void main(String[] args){
        int n  , po = 0, count = 0;
        double arm;
        int[] elems = {0,0,0,0};
        for(int i = 9999; i > 100; i--){
            for( n = i;n >= 1; count++){
                elems[count] = n%10;
                n /= 10;
                po++;
            }
            arm = pow(elems[0],po)+pow(elems[1],po)+pow(elems[2],po)+pow(elems[3],po);
            if(arm == i ){
                System.out.println(i);
            }
            po = 0;
            count = 0;
        }
    }
}

输出:

9474
8208
1634

如您所见,差异仅在于循环的方向......为什么会发生这种情况?

标签: java

解决方案


并非所有elems元素都被覆盖,因此在评估i < 1000时保留先前的内容。arm = pow(...

也重置elems外部循环的每次迭代for


推荐阅读