Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何求偶数位置上的元素和?_C++ - Fatal编程技术网

C++ 如何求偶数位置上的元素和?

C++ 如何求偶数位置上的元素和?,c++,C++,如何找到偶数位置上的元素之和而不使用数组等,只有正常操作 例如: 159 总和=5 159120 总和=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; } 您最初使用pos 1将其称为演示 您最初使用po

如何找到偶数位置上的元素之和而不使用数组等,只有正常操作

例如: 159

总和=5

159120

总和=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;
}
您最初使用pos 1将其称为演示


您最初使用pos 1-demo调用它。

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

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()
函数。但这是留给读者的练习

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

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()
函数。但这是留给读者的练习

由于您从左侧开始计算“偶数”位数,因此首先需要计算位数,以了解最低有效位数是否为偶数:

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;
}
由于从左侧开始计算“偶数”位数,因此首先需要计算位数,以了解最低有效位是否为偶数:

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

简单的修改就可以了

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;
}
intmain()
{
int x=1549;
//获取位数
int length=snprintf(NULL,0,“%i”,x);
整数和=0;
而(x>0){
如果(x%100!=0){
//检查位数是否从最后一位开始为偶数
如果(长度%2==0){
总和+=x%10;
x/=10;
}
否则{
x/=10;
总和+=x%10;
}
x/=10;
}
}

很好,简单的修改就可以了

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;
}
intmain()
{
int x=1549;
//获取位数
int length=snprintf(NULL,0,“%i”,x);
整数和=0;
而(x>0){
如果(x%100!=0){
//检查位数是否从最后一位开始为偶数
如果(长度%2==0){
总和+=x%10;
x/=10;
}
否则{
x/=10;
总和+=x%10;
}
x/=10;
}
}


cout主函数中的数字。不值得回答:while(x){x/=10;sum+=x%10;x/=10;}出于好奇:只是一个练习,还是你真的需要它来做一些实际的事情?这对像BigInteger这样的数字字符串很好。这只是一个练习。主函数中的数字。不值得回答:while(x){x/=10;和+=x%10;x/=10;}出于好奇:这只是一个练习,或者你真的需要它来做一些实际的事情吗?这对于像BigInteger这样的数字串来说是很好的。这只是一个练习。刚刚测试过,似乎不起作用。
159
它输出
15
,这显然是错误的,而对于
159120
它输出
16
@user3002211哦,在偶数位置上,我出于某种原因认为你在数字中累积奇数,等等on@user3002211递归方法实际上更容易理解。请注意,我只是用num%10提取数字,然后传递数字的剩余部分(用num/10提取)对于同样的过程,当且仅当位置为偶数时保持结果。刚刚测试过,它似乎不起作用。
159
它输出
15
,这显然是错误的,
159120
它输出
16
@user3002211哦,在偶数位置上,出于某种原因,我认为你在积累奇数I请不要挂断电话号码on@user3002211递归方法实际上更容易理解。请注意,我只是用num%10提取数字,然后传递数字的剩余部分(用num/10提取)对于非常相同的过程,当且仅当位置为偶数时保持结果。似乎对
159
有效,它给出
5
,但是对于
159120
,它给出了一个答案
12
,这是奇数的总和,而不是偶数。@user3002211我没有测试过,但问题似乎是它从后面开始,所以它会这样做es{2+9+1}很抱歉,还有一些其他答案应该可以使用。@user3002211现在应该可以使用了。基本上,它检查位数是否为偶数,它从最后一位开始(159120为0)。如果不是偶数,它从第二位开始到最后一位(159为5)似乎适用于
159
,它给出了
5
,然而对于
159120
,它给出了一个答案
12
,这是奇数的总和,不是偶数。@user3002211我还没有测试,但问题似乎是它从后面开始,所以它是{2+9+1}很抱歉,还有一些其他答案应该可以使用。@user3002211现在应该可以使用了。基本上,它检查位数是否为偶数,它从最后一位开始(如果是159120,则为0)。如果不是偶数,则从第二位开始(如果是159,则为5)我不确定编译器是否已经处理了这个问题,但是除法非常昂贵,您可能希望将(x/=10)替换为(x*=0.1),(x%10)替换为(x-10*((int)(0.1*x)),将(x/=100)替换为(x*=0.01)。不太可读,但如果您对存储在数据库中的大量整数执行此SumoFendigits,则会在性能上产生巨大差异。@n非常好。此代码未经过优化。如果您需要多次执行此操作,则值得对循环进行优化。我不确定编译器是否已执行此操作我们会注意这一点,但是划分是非常昂贵的,您可能希望将(x/=10)替换为(x*=0.1),(x%10)替换为(x-10*((int)(0.1*x)),将(x/=100)替换为(x*=0.01)。不太可读,但如果假设您对存储在数据库中的大量整数执行此SUMOFENDIGITS,则会在性能上产生巨大的差异。@n非常好。此代码未经过优化。如果您需要执行此操作,请