执行阿姆斯壮号码计划时遇到的问题

时间:2015-07-08 10:48:35

标签: java numbers solution

我正在尝试一个代码,以确定输入的数字是否是阿姆斯特朗。这是代码:

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。然后abc应分别为3,4和5。 请指导。

1 个答案:

答案 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;
}