Java中的Armstrong数字代码无法正常工作

时间:2014-10-26 14:10:44

标签: java

我是Java新手,我正在编写代码来检查数字是否为0到999范围内的阿姆斯壮数字。

请告诉我有什么问题。在命令提示符下运行时,它会重复打印:

  

1是计数

代码:

import java.util.*;
class Armstrong
{
    public static void main (String[] args)
    {
        int sum = 0;

        for (int i = 0; i < 1000; i++)
        {
            int n = i;
            int count =0;

            while(n > 0)
            {
                int mod = n % 10;
                n = n / 10;
                count++;
            }
            System.out.println(+count+ "is the count");

            for (int j = 1; j < count; j++)
            {   
                int val = i % 10;
                i= i / 10;
                sum = val * val * val + sum;
            }
            if (sum == i)
            {
                System.out.println( +i+ "is an Armstrong number");
            }       
        }   
    }
}

3 个答案:

答案 0 :(得分:2)

  

阿姆斯壮的数字是一个数字,它是自己的数字之和,每个数字都是数字的幂。

对于初学者,您总是将数字提高到3的幂,因此您的计算只适用于i100之间的999

其次,您正在更改内循环中的i,因此最后if (sum==i)的比较将失败,因为总和应与原始i进行比较。

接下来,在sum的每次迭代中,您都不会将0重置为i

您也可以跳过其中一个数字。

这似乎有效:

    int sum = 0;

    for (int i = 100; i < 1000; i++) { // start at 100
        sum = 0; // clear the sum in each iteration
        int n = i;
        int count = 0;

        while (n > 0) {
            int mod = n % 10;
            n = n / 10;
            count++;
        }
        n = i;
        for (int j = 0; j < count; j++) { // iterate over all the digits

            int val = n % 10;
            n = n / 10; // don't change i
            sum = val * val * val + sum;

        }
        if (sum == i) {
            System.out.println(i + " is an Armstrong number");
        }
    }

返回:

153 is an Armstrong number
370 is an Armstrong number
371 is an Armstrong number
407 is an Armstrong number

答案 1 :(得分:0)

无需运行三个循环。你可以这样简单:

for(int i = 0; i < 1000; i++) {
        int currNumber = i;
        int sum = 0;

        while(currNumber != 0)
        {
            int mod = currNumber % 10;
            sum = sum + mod * mod * mod;
            currNumber = currNumber / 10;
        }

        if (i == sum) {
            System.out.println(i + " is an Armstrong number");
        }
}

答案 2 :(得分:-1)

在java中打印Armstrong号码

public class CalculatArmstrong 
{   

public static void main(String[] args) 
{

    for(int i=0;i<=2000;i++)
    {

        int number=i;
        int n=number;
        int rem;
        int arms=0;

        while(number>0)
        {
            rem=number%10;

            arms=arms+rem*rem*rem;

            number=number/10;

        }


        if(n==arms)
        {

            System.out.println(n);
        }

    }

}

}