如何找到偶数位置的元素总和?

时间:2013-11-17 19:23:25

标签: c++

如何在不使用数组等的情况下找到偶数位置上的元素总和,只进行常规操作?

例如: 159

Sum = 5。

159120

Sum = 5 + 1 + 0 = 6.

我的工作:

int sumofdigits(int x)
{
    int sum = 0;
    while(x > 0){
        if (x % 100 != 0)
            sum += x % 100;
        x /= 100;
    }
    return sum;
}

4 个答案:

答案 0 :(得分:2)

由于你从左边开始计算“偶数”数字,你首先需要计算位数,以便知道最低有效数字是否是偶数:

int sumOfEvenDigits(int x)
{
    // First, count the number of digits
    int digitCount = 0;
    int tmp = x;
    while(tmp) {
        tmp /= 10;
        digitCount++;
    }

    // If the number of digits is odd, throw away the least significant digit
    if(digitCount % 2 == 1)
        x /= 10;

    // Keep adding the least significant digit, and throwing away two digits until you're done.
    int sum = 0;
    while(x){
        sum += x % 10;
        x /= 100;
    }
    return sum;
}

答案 1 :(得分:1)

int accumulateIfEvenPos(int num, int pos) {
    if (num == 0) return 0;
    int digit = num % 10;
    int next = num / 10;
    return pos & 1 ? digit + accumulateIfOdd(next, ++pos) : accumulateIfOdd(next, ++pos);
}

您最初使用pos 1调用它 - 演示here

答案 2 :(得分:1)

简单的修改应该可以解决问题。

int main()
{
    int x = 1549;
    //Get the number of digits
    int length = snprintf(NULL, 0, "%i", x);
    int sum = 0;
    while(x > 0){
        if (x % 100 != 0) {
            //check if the number of digits is even to start from the last digit
            if (length % 2 == 0) {
                sum += x % 10;
                x /= 10; 
            }
            else {
                x /= 10;
                sum += x % 10;
            }

            x /= 10;
        }
    }
   cout << sum << endl; 

   return 0;
}

编辑:解决了算法中的问题/错误。这可能不是最好的答案,但我不想完全写一个不同的答案(比编辑前的答案)。

答案 3 :(得分:0)

您需要有一个跟踪位置的索引变量:

unsigned int digit_position = 0;
while (x > 0)  
{  
  unsigned int digit_value = x % 10;
  if (digit_position is even)
  {
     // Add digit_value to sum
  }
  // Shift value right one digit
  x /= 10;
  ++digit_position;
}

可能有其他方法使用位置变量和pow()函数。但这仍然是读者的练习。