我正在尝试一个代码,以确定输入的数字是否是阿姆斯特朗。这是代码:
import java.util.*;
public class Arm {
int a, b, c;
void m1() {
Scanner obj = new Scanner(System.in);
System.out.println("Enter a number");
int number = obj.nextInt();
number = (100 * a) + (10 * b) + (1 * c);
if ((a * a * a) + (b * b * b) + (c * c * c) == number) {
System.out.println("number is armstrong");
} else {
System.out.println("number is not armstrong");
}
}
public static void main(String args[]) {
Arm obj = new Arm();
obj.m1();
}
}
这里a,b和c的值为零。但这不是正确的结果。假如我们输入一个数字345
。然后a
,b
和c
应分别为3,4和5。
请指导。
答案 0 :(得分:2)
这不是你计算a,b,c的方式。
为了找到a,b,c,我们反复除以10
并得到余地modulus
。
int digit = 0;
int sum = 0;
while(num > 0)
{
digit = num % 10;
sum += Math.pow(digit, 3);
num = num/10;
}
为什么我们使用/
和%
考虑345
。
现在得到最后一位数字可以做什么?
模数返回什么?余下的,所以如果我们执行%10
,我们得到最后一位数。
345 % 10 = 5
现在我们想要倒数第二位。
所以我们将数字除以10,所以得到商
345 / 10 = 34
现在再次,如果我们可以执行模数,我们得到4
等等..
100 * a + 10 * b + 1 * c做什么?
如果我们有个别数字,则用于获取数字。
假设我们有3,4,5我们知道我们得到345
但我们该怎么做?
3 * 100 = 300
4 * 10 = 40
5 * 1 = 5
-----------
300 + 40 + 5 = 345
现在完成整个计划。
public boolean isAmg(int num)
{
int digit = 0;
int sum = 0;
int copyNum = num; //used to check at the last
while(num > 0)
{
digit = num % 10;
sum += Math.pow(digit, 3);
num = num / 10;
}
return sum == copyNum;
}