Isa*_*wis 14 java iteration math numbers
我正在尝试创建一个程序,用于判断给定的数字是否为" Happy Number ".找到一个快乐的数字需要将数字中的每个数字平方,并将每个数字的平方的结果加在一起.
在Python中,您可以使用以下内容:
SQUARE[d] for d in str(n)
Run Code Online (Sandbox Code Playgroud)
但是我找不到如何在Java中迭代数字中的每个数字.正如您所知,我是新手,并且在Java文档中找不到答案.
Arg*_*ote 24
您可以使用模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;
}
Run Code Online (Sandbox Code Playgroud)
你也可以将它放在一个字符串中并将其转换为一个char数组并迭代它做类似的事情 Math.pow(charArray[i] - '0', 2.0);
我想知道哪种方法可以最快地将正数拆分为 Java 中的数字,字符串与模数
public static ArrayList<Integer> splitViaString(long number) {
ArrayList<Integer> 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
}
Run Code Online (Sandbox Code Playgroud)
对比
public static ArrayList<Integer> splitViaModulo(long number) {
ArrayList<Integer> result = new ArrayList<>();
while (number > 0) {
int digit = (int) (number % 10);
result.add(digit);
number /= 10;
}
return result; // LSD at start of list
}
Run Code Online (Sandbox Code Playgroud)
通过Long.MAX_VALUE10,000,000 次测试每种方法,字符串版本需要 2.090 秒,模版本需要 2.334 秒。(在 Eclipse Neon 中运行的 64 位 Ubuntu 上的 Oracle Java 8)
所以实际上并不多,但我有点惊讶 String 更快
假设该数字是一个开头的整数:
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);
}
Run Code Online (Sandbox Code Playgroud)