如何在不使用数组等的情况下找到偶数位置上的元素总和,只进行常规操作?
例如: 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;
}
答案 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()
函数。但这仍然是读者的练习。