检查一个数字是否是阿姆斯特朗数字java

时间:2017-05-29 22:35:05

标签: java

 public static void main(String[] args) {
    System.out.print("Please enter a number:"+" ");
    Scanner scan= new Scanner(System.in);
    long number=scan.nextLong();
    String num=String.valueOf(number);   // simple way to get the number of digits in a number
    long sum=0;
    for(int i=0;i<num.length();i++)
    {

        sum+=Math.pow(num.charAt(i), num.length());

    }

    if(sum==number)
    {
        System.out.print(number+" "+"is an armstrong number");
    }
    else
    {
        System.out.print(number+" "+"is not an armstrong number");
    }
}

我需要知道此代码有什么问题,总和行无法正常工作。例如,如果我输入数字371(阿姆斯特朗数),总和的输出假定为371但根据我的代码显示的输出是416675371

3 个答案:

答案 0 :(得分:2)

目前,您正在将Math#pow应用于从num.charAt(i)返回的字符的ASCII代码,而不是数字本身。要检索数字本身而不是ASCII表示 使用Character.getNumericValue(num.charAt(i))代替num.charAt(i)

答案 1 :(得分:1)

另一种方法是找到char和&#39; 0&#39;的ascii值之间的差异:

for(int i=0;i<num.length();i++)
{
    sum += Math.pow(num.charAt(i) - '0', num.length());
}

注意:&#39; 0&#39;的ascii值(数字)是48

答案 2 :(得分:0)

您可以这样做:

sum += Math.pow(Integer.parseInt(String.valueOf(num.charAt(i))), num.length());

如何运作

假设您的数字3713个数字组成,那么当您通过在输入的数字上调用此方法num获得字符串值String.valueOf(number);时,字符串num的长度为3

现在在for loop中,在每一轮中,它会在char [i指定的每个索引处将其作为num.charAt(i)读取后计算每个数字的功效],然后将其作为String [String.valueOf()]阅读,最后将其解析为Integer [Integer.parseInt()]。

在每个循环结束时,计算将添加到sum变量。