遍历数字中的每个数字
我正在尝试创建一个程序,告诉它给出的数字是否为“ 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));