1

タイプからタイプに移動するときに、モジュロ演算に基づく次のコード ソリューションが機能しないのはなぜだろうと思っていました。intlong

たとえば、 return111111111111Lを取得したいとします12L

次の質問で説明されているのと同じ期待される動作を実現するにはどうすればよいですか (int 型の値に対してのみ機能します)。 指定された正の数のすべての桁の合計

私はパフォーマンスの問題にも焦点を当てているので、効率的な解決策を探しています。

public static long sumTheDigitsVersion1(long inputValue){
    long sum = inputValue % 9L;
        if(sum == 0){
            if(inputValue > 0)
                return 9L;
        }
    return sum;
}

public static long sumTheDigitsVersion2(long inputValue){
    return inputValue - 9L * ((inputValue - 1L) / 9L);
}

ありがとう

4

5 に答える 5

3

この解決策は、別の問題に対する解決策であるため、機能しません。つまり、次のとおりです。

結果が 1 桁になるまで、数字の桁を繰り返し足します。

つまり、111111111111-> 12->を計算し3ます。

あなたがそれについて考えるとき、n % 9おそらく戻ることはできません12(これはあなたが期待していると言っています)。

于 2013-08-25T14:02:17.687 に答える
2

再帰的で効率的なソリューション:

public static long digitSum(long n) {
    if (n == 0)
        return 0;
    return n%10 + digitSum(n/10);
}
于 2013-08-25T14:55:28.320 に答える