我正在尝试创建一个程序,用于判断给定的数字是否为“Happy Number”。找到一个快乐的数字需要将数字中的每个数字平方,并将每个数字的平方结果加在一起。
在Python中,您可以使用以下内容:
SQUARE[d] for d in str(n)
但我找不到如何在Java中迭代数字中的每个数字。正如您所知,我是新手,并且在Java文档中找不到答案。
答案 0 :(得分:22)
您可以使用模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);
答案 1 :(得分:5)
假设数字是一个开头的整数:
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);
}
答案 2 :(得分:1)
我想知道哪种方法最快将正数分成Java中的数字,String vs modulo
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
}
VS
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
}
通过传递Long.MAX_VALUE
10,000,000次测试每个方法,字符串版本花费2.090秒,模数版本花费2.334秒。 (在Eclipse Neon上运行的64位Ubuntu上的Oracle Java 8)
所以真的不是很多,但我对String更快感到有些惊讶
答案 3 :(得分:0)
在上面的示例中,我们可以使用:
int digit = Character.getNumericValue(strNum.charAt(i));
代替
int digit = Integer.parseInt(strNum.charAt(i));
答案 4 :(得分:0)
此代码返回适合您描述的第一个数字(1之后)。
var myInstance = new MyClass
myInstance.myMethod('foo') // returns an object you are looking for