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
答案 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());
如何运作:
假设您的数字371
由3
个数字组成,那么当您通过在输入的数字上调用此方法num
获得字符串值String.valueOf(number);
时,字符串num
的长度为3
。
现在在for loop
中,在每一轮中,它会在char
[i
指定的每个索引处将其作为num.charAt(i)
读取后计算每个数字的功效],然后将其作为String
[String.valueOf()
]阅读,最后将其解析为Integer
[Integer.parseInt()
]。
在每个循环结束时,计算将添加到sum
变量。