0

我试图通过这样做来总结卡号中的所有其他数字:

/*
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是奇数,我取一个数字的模,所以我得到数字的最后一位,然后将其加到总和中,然后我通过将其除以 10 和如果数字去掉最后一位甚至我只是摆脱了i第 th 位置的数字。

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

于 2013-10-28T17:37:51.247 回答
1

您仅在第一次迭代时就打破了循环。因此,您不会再进行另一次迭代。

但是,删除break也不会解决您的问题。number % 10将始终为您提供号码的最后一位,而不是每个备用号码。您应该遵循以下方法:

  • num % 10- 会给你最后一个数字。
  • 然后num通过修剪最后 2 位来更新。
  • 重复
于 2013-10-28T17:03:40.820 回答
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 回答