遍历数字中的每个数字

我正在尝试创建一个程序,告诉它给出的数字是否为“ Happy Number ”。 找到一个快乐的数字需要将数字中的每个数字平方,并将每个数字的平方结果加在一起。

在Python中,您可以使用以下内容:

SQUARE[d] for d in str(n) 

但是我找不到如何在Java中迭代数字中的每个数字。 正如您所知,我是新手,并且在Java文档中找不到答案。

您可以使用模10运算来获取最右边的数字,然后将数字除以10以获得下一个数字。

 long addSquaresOfDigits(int number) { long result = 0; int tmp = 0; while(number > 0) { tmp = number % 10; result += tmp * tmp; number /= 10; } return result; } 

你也可以将它放在一个字符串中并将其转换为一个char数组,然后迭代它来做类似Math.pow(charArray[i] - '0', 2.0);

假设该数字是一个开头的整数:

 int num = 56; String strNum = "" + num; int strLength = strNum.length(); int sum = 0; for (int i = 0; i < strLength; ++i) { int digit = Integer.parseInt(strNum.charAt(i)); sum += (digit * digit); } 

我想知道哪种方法最快将正数分成Java中的数字,String vs modulo

  public static ArrayList splitViaString(long number) { ArrayList result = new ArrayList<>(); String s = Long.toString(number); for (int i = 0; i < s.length(); i++) { result.add(s.charAt(i) - '0'); } return result; // MSD at start of list } 

VS

  public static ArrayList splitViaModulo(long number) { ArrayList result = new ArrayList<>(); while (number > 0) { int digit = (int) (number % 10); result.add(digit); number /= 10; } return result; // LSD at start of list } 

通过传递Long.MAX_VALUE 10,000,000次测试每个方法,字符串版本花费2.090秒,模数版本花费Long.MAX_VALUE秒。 (在Eclipse Neon上运行的64位Ubuntu上的Oracle Java 8)

真的不是很多,但我有点惊讶String更快

在上面的例子中我们可以使用:

 int digit = Character.getNumericValue(strNum.charAt(i)); 

代替

 int digit = Integer.parseInt(strNum.charAt(i));