2011-02-15 63 views
12

我正在嘗試創建一個程序,該程序會告訴給出的數字是否爲「Happy Number」。找到一個快樂的數字需要將數字中的每個數字平方,並將每個數字的平方的結果相加。遍歷數字中的每個數字

在Python中,你可以使用這樣的事情:

SQUARE[d] for d in str(n) 

但我找不到如何通過每個數字在Java中的迭代數量。如你所知,我對它很陌生,在Java文檔中找不到答案。

+0

,請接受答案。 – Argote 2011-02-15 23:41:29

回答

20

您可以使用模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);

+0

啊......那可行。謝謝你的提示。那裏有一塊大腦空白! :D – Crossdiver 2011-02-15 21:19:16

4

假設數量迭代是開始一個整數:

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); 
} 
0

我想知道哪種方法最快將正數分解爲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霓虹燈運行)

所以不是很多真的,但我有些意外的是如果你使用的問題做字符串是更快