首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在java中查找Armstrong数

在java中查找Armstrong数
EN

Stack Overflow用户
提问于 2018-10-05 03:51:11
回答 2查看 100关注 0票数 0

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

代码语言:javascript
复制
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;
        }
    }
}

输出:

代码语言:javascript
复制
153
370
371
407
1634
8208
9474

和不起作用的代码:

代码语言:javascript
复制
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;
        }
    }
}

输出:

代码语言:javascript
复制
9474
8208
1634

如你所见,不同之处只在于循环的方向。为什么会发生这种情况?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-05 04:18:46

新增: Arrays.fill(elems,0);

代码语言:javascript
复制
 public static void armstrong() {
    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);
        }
        //added
        Arrays.fill(elems, 0);
        po = 0;
        count = 0;
    }

}
票数 2
EN

Stack Overflow用户

发布于 2018-10-05 04:01:18

对于i < 1000,并不是所有的elems元素都会被覆盖,因此在计算arm = pow(...时会保留以前的内容。

也为外部for-loop的每个迭代重置elems

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52654171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档