2016-11-06 6 views
0

以下のようにして負の数を許可し、正の値として扱うにはどうすればよいですか? Ex。 -91 = 10 現在のところ、int nをとり、すべての数字を追加するために機能しますが、正の場合にのみ機能します。ありがとう!数字の和(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