2016-11-06 105 views
0

我如何使下列允許負數並將它們視爲正數。防爆。 -91 = 10 它目前用於取整數並添加所有數字,但只適用於正數。謝謝!數字總和(INC。負數)

public static int sumOfDigits(int n) { 
    int sum = 0; 
    while (n > 0) { 
     sum += n % 10; 
     n = n/10; 
    } 
    return sum; 
} 
+0

n = Math.abs(n)。這裏根本沒有遞歸。爲什麼標題? –

+0

@JBNizet'n = Math.abs(n)'對於'Integer.MIN_VALUE'失敗。 – kgeorgiy

回答

2

簡單的解決方案:添加n = Math.abs(n)作爲函數的第一行。此解決方案適用於所有號碼,但Integer.MIN_VALUE除外。

始終正確的解決方案:將環路條件替換爲n != 0,並返回Math.abs(sum)作爲結果。

+0

非常感謝,學到了新東西! – Lanie909

0
public static int sumOfDigits(int n) { 
    if (n == 0) return 0; 
    else return (n % 10) + sumOfDigits(n/10); 
} 
+0

可以做一點點評論,因爲OP使用非遞歸方法 – smac89

+0

在本文的第一個版本中,作者要求遞歸的方式來計算他的函數。因此我添加了遞歸版本。 – biro

+0

返回0爲負數 - 我不認爲這就是要求... – assylias