奇数位数的总和

时间:2013-10-28 17:01:10

标签: java credit-card luhn

我试图通过这样做来计算卡号中的每个其他数字:

/*
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 个答案:

答案 0 :(得分:1)

你只是在第一次迭代时就脱离了循环。所以,你不会再去另一次迭代了。

但是,删除break也无法解决您的问题。 number % 10将始终为您提供该号码的最后一位数字,而不是每个替代号码。你应该遵循这种方法:

  • num % 10 - 会给你最后一位数。
  • 然后通过修剪最后2位数来更新num
  • 重复

答案 1 :(得分: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是奇数,我取一个数字的模数,所以我得到数字的最后一位数,然后将它加到总和然后我除去最后一位数将它除以10,如果数字是偶数,我只是摆脱i位置的数字。

这里我以相反的顺序收集奇数位的数字。

答案 2 :(得分: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

答案 3 :(得分:-1)

这是更新的代码,其中我删除了flag的逻辑。这更短,更容易理解。

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