我正在嘗試創建一個程序,該程序會告訴給出的數字是否爲「Happy Number」。找到一個快樂的數字需要將數字中的每個數字平方,並將每個數字的平方的結果相加。遍歷數字中的每個數字
在Python中,你可以使用這樣的事情:
SQUARE[d] for d in str(n)
但我找不到如何通過每個數字在Java中的迭代數量。如你所知,我對它很陌生,在Java文檔中找不到答案。
我正在嘗試創建一個程序,該程序會告訴給出的數字是否爲「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;
}
你也可以把它放在一個字符串,並把它轉換成一個字符數組,並通過它做這樣的事情Math.pow(charArray[i] - '0', 2.0);
啊......那可行。謝謝你的提示。那裏有一塊大腦空白! :D – Crossdiver 2011-02-15 21:19:16
假設數量迭代是開始一個整數:
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<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秒。 (甲骨文的Java 8在64位的Ubuntu在Eclipse霓虹燈運行)
所以不是很多真的,但我有些意外的是如果你使用的問題做字符串是更快
,請接受答案。 – Argote 2011-02-15 23:41:29