0

これを行うことで、カード番号の1桁おきに合計しようとしています:

/*
Return the sum of the odd-place digits.
*/

public static int sumOfoddPlace(long number)
{
    int maxDigitLength = 16;
    int sum = 0;
    for (int i = 1; i <= maxDigitLength; i++)
    {
        if (i % 2 == 1)
        {
            sum = sum + (int)(number % 10);
        }
        break;
    }
    return sum;
}

得られるのは 6 だけです。探している合計は 37 になるはずです。

4

4 に答える 4

1

これを試してください...これはあなたのために働くはずです

     public static int sumOfoddPlace(long number)
     {
         int maxDigitLength = 16;
         int sum = 0;
         for (int i = 0; i < maxDigitLength; i++)
         {
             if (i % 2 != 0)
             {
                 sum =  (sum + (int)(number % 10));
                 number =  number/10;

             }else {
                 number =  number/10;
            }

         }
         return sum;
 }

ここで行ったのは、iが奇数の場合、数値の mod を取得して、数値の最後の桁を取得し、それを合計に追加してから、最後の桁を 10 で割って取り除くことです。i番目の桁の数字を取り除くだけです。

ここでは、奇数の桁を逆順に集めています。

于 2013-10-28T17:37:51.247 に答える
0

私はまだ最小の解決策を見ていないので、ここに行きます:

public static int sumOddDigits(long input) {
    int sum = 0;

    for (long temp = input; temp > 0; temp /= 100) {
        sum += temp % 10;
    } 
    return sum;
}

10 で割って偶数かどうかを確認する必要はありません。毎回 100 で割ることができます。

デモ: http://ideone.com/sDZfpU

于 2013-10-30T18:08:59.103 に答える
-1

これは、フラグのロジックを削除した更新されたコードです。これは短く、理解しやすいです。

public static int sumOfOddDigits(long number){
    int sum = 0;
    String newString = new StringBuilder(String.valueOf(number)).reverse().toString();
    number = Long.parseLong(newString);

    while (number != 0){
        sum = (int) (sum + number % 10);
        number = number / 100;
    }
    return sum;
}
于 2013-10-28T17:38:45.723 に答える