Java 检查数字是否为Armstrong数字 publicstaticvoidmain(字符串[]args){ System.out.print(“请输入一个数字:+”); 扫描仪扫描=新扫描仪(System.in); long number=scan.nextLong(); String num=String.valueOf(number);//获取数字位数的简单方法 长和=0; 对于(int i=0;i

Java 检查数字是否为Armstrong数字 publicstaticvoidmain(字符串[]args){ System.out.print(“请输入一个数字:+”); 扫描仪扫描=新扫描仪(System.in); long number=scan.nextLong(); String num=String.valueOf(number);//获取数字位数的简单方法 长和=0; 对于(int i=0;i,java,Java,当前,您正在对从num.charAt(i)返回的字符的ASCII码而不是数字本身应用Math#pow。要检索数字本身而不是ASCII表示,请 使用Character.getNumericValue(num.charAt(i))而不是num.charAt(i)另一种方法是查找字符和ascii值“0”之间的差异: public static void main(String[] args) { System.out.print("Please enter a number:"+" ");

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

另一种方法是查找字符和ascii值“0”之间的差异:

 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");
    }
}

对于(int i=0;i您可以执行以下操作:

for(int i=0;i<num.length();i++)
{
    sum += Math.pow(num.charAt(i) - '0', num.length());
}
它的工作原理

假设您有一个数字
371
,它由
3
个数字组成,因此当您通过调用此方法
String.valueOf(number);
获取字符串值
num
时,字符串
num
的长度将为
3

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


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

@DawoodibnKareem我希望我的更新答案完成您的评论。肯定是一个改进。@YoussefAbdeen如果您对此代码有任何疑问,请不要犹豫,akhi:)@YoussefAbdeen非常欢迎您,如果它有助于您,请接受它:)
sum += Math.pow(Integer.parseInt(String.valueOf(num.charAt(i))), num.length());