Java代码发现Armstrong数最多为3位数,但从4位数开始失败



我两天前刚开始学习java,并尝试做一项作业来确定三位数是否是Armstrong数。该代码最多可工作3位数字,之后它无法工作在4位阿姆斯特朗数字,如1634、8208等。

public class project1 {
public static void main(String[] args) {
int number = 9474, originalNumber, remainder, result = 0;
originalNumber = number;
while (originalNumber != 0)
{
remainder = originalNumber % 10;
result += Math.pow(remainder, 3);
originalNumber /= 10;
}
if(result == number)
System.out.println(number + " is an Armstrong number.");
else
System.out.println(number + " is not an Armstrong number.");
}
}

您的解决方案只支持3位数。如果你想将其更改为任何数字的数字,应该首先计算数字的数量:

int numberOfDigits = 0;
while (originalNumber != 0) {
numberOfDigits++;
originalNumber /= 10;
}

然后在你的代码中对Math.pow方法的威力做一个小的修改:

result += Math.pow(remainder, numberOfDigits);

完整的解决方案是:

class project1 {
public static void main(String[] args) {
int number = 9474, originalNumber, remainder, result = 0;
originalNumber = number;
int numberOfDigits = 0;
while (originalNumber != 0) {
numberOfDigits++;
originalNumber /= 10;
}
originalNumber = number;
while (originalNumber != 0) {
remainder = originalNumber % 10;
result += Math.pow(remainder, numberOfDigits);
originalNumber /= 10;
}
if (result == number)
System.out.println(number + " is an Armstrong number.");
else
System.out.println(number + " is not an Armstrong number.");
}
}
public class ArmstrongNumberDemo
{
public static void main(String[] args) {
int num = 9474, realNumber, remainder, output = 0, a = 0;
realNumber = num;
for(;realNumber != 0; realNumber /= 10, ++a);
realNumber = num;
for(;realNumber != 0; realNumber /= 10){
remainder = realNumber % 10;
output += Math.pow(remainder, a);
}
if(output == num){
System.out.println(num + " is an Armstrong number.");
}
else{
System.out.println(num + " is not an Armstrong number.");
}
}
}

相关内容

最新更新