Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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,我需要在一个整数中的偶数和奇数处加上数字。比如说,让数字=1234567。偶数位数之和=2+4+6=12奇数位数之和=1+3+5+7=16 我目前拥有的代码是: int returnsum(int num) { while (num) { rem = num % 10; sum = sum + rem; num = num / 10; } while (sum) { a = sum % 10; arr[i] = a: sum = s

我需要在一个整数中的偶数和奇数处加上数字。比如说,让数字=1234567。偶数位数之和=2+4+6=12奇数位数之和=1+3+5+7=16

我目前拥有的代码是:

int returnsum(int num) {
  while (num) {
    rem = num % 10;
    sum = sum + rem;
    num = num / 10;
  }
  while (sum) {
    a = sum % 10;
    arr[i] = a:
      sum = sum / 10;
    i++;
  }
  for (i = 0; a[i]; i += 2) {
    summ = summ + a[i];
  }
  return summ;
}

void main() {
  int n, m, oddSum = 0, evenSum = 0;
  printf("Please insert the number for the program:");
  scanf("%d", & n);
  while (n != 0) {
    oddSum += n % 10;
    n /= 10;
    evenSum += n % 10;
    n /= 10;
  }
  printf("Sum of digits in even  places:%d\n", evenSum);
  printf("Sum of digits in odd  places:%d\n", oddSum);
}

好的,让我们首先假设这个数字有偶数个数字,所以倒数第二个和倒数第二个分别位于奇数和偶数位置

然后,可以使用
编号%10
检索最后一个数字,使用
(编号/10)%10
检索最后一个数字

所以,知道了这一点,你可以简单地循环这个数字,把这些值相加,除以100,直到得到一个小于10的数字

如果该数字为零,那么您关于原始数据的位数为偶数的假设是正确的,您可以退出

如果是非零(
1..9
),那么您的假设是错误的,您应该交换迄今为止的偶数和奇数总和,然后将最后一位数字添加到奇数总和

伪代码如下所示:

def getEvenOdd (num):
    even = 0
    odd = 0

    while num > 9:
        even = even + (num % 10)
        odd = odd + ((num / 10) % 10)
        num = num / 100

    if num > 0:
        temp = even
        even = odd
        odd = temp
        odd = odd +  num

    return (even,odd)

print getEvenOdd(1234567)
它的输出类似于
(12,16)


伪代码看起来像初学者的Python并不是偶然的,因为该语言是完美的伪代码语言,前提是您不要弄乱它更复杂的角落。

检查以下代码:

#include <stdio.h>

int main(void){
char p[20];
int i=0,even=0,odd=0,n;
scanf("%d",&n);
sprintf(p,"%d",n);
while(p[i] != '\0')
{
    if(i%2 == 0)
    odd+= (p[i] - '0');
    else
    even+= (p[i] - '0');

    i++;
}
printf("%d\n",even);
printf("%d\n",odd);
return 0;
}
#包括
内部主(空){
charp[20];
int i=0,偶数=0,奇数=0,n;
scanf(“%d”和“&n”);
sprintf(p,“%d”,n);
而(p[i]!='\0')
{
如果(i%2==0)
奇数+=(p[i]-'0');
其他的
偶数+=(p[i]-'0');
i++;
}
printf(“%d\n”,偶数);
printf(“%d\n”,奇数);
返回0;
}
我的五美分。:)


要对其他数字求和,只需在每次迭代中除以100即可:

int sumodd(int num) {
    int sum = 0, rem;
    while(num) {
        rem=num%10;
        sum=sum+rem;
        num=num/100);
    }
    return sum;
}
由于我们已经有了一个可以对其他数字求和的函数,我们可以重复使用它:

int sumeven(int num) {
    return sumodd(num/10);
}

以下是您的问题的解决方案:

void main()
{
 int n,m,oddSum=0,evenSum=0;
 printf("Please insert the number for the program:");
 scanf("%d",&n);
 int flag=0;
 int counter=1;
 while (n!=0) {
   if(counter%2==0)
   {
     evenSum += n % 10;
     n /= 10;
   }
   else
   {
     oddSum += n % 10;
     n /= 10;
   }
   counter++;
 }

 if(counter%2==0)
 {
   int temp=oddSum;
   oddSum=evenSum;
   evenSum=temp;
 }
 printf("Sum of digits in even  places:%d\n",evenSum);
 printf("Sum of digits in odd  places:%d\n",oddSum);
}

显示你已经做了什么?我已经把数字倒过来,把它放在数组中,元素放在奇数或偶数的地方,但它太长了。倒过来怎么办?@almasshaikh我想他说的倒过来是指去掉每个数字的
%
/
。这将自动反转。:-)请编辑您的帖子并在那里添加代码。正如目前所写,我无法找到
rem
sum
sum
a[I]
等的定义。
int sumeven(int num) {
    return sumodd(num/10);
}
void main()
{
 int n,m,oddSum=0,evenSum=0;
 printf("Please insert the number for the program:");
 scanf("%d",&n);
 int flag=0;
 int counter=1;
 while (n!=0) {
   if(counter%2==0)
   {
     evenSum += n % 10;
     n /= 10;
   }
   else
   {
     oddSum += n % 10;
     n /= 10;
   }
   counter++;
 }

 if(counter%2==0)
 {
   int temp=oddSum;
   oddSum=evenSum;
   evenSum=temp;
 }
 printf("Sum of digits in even  places:%d\n",evenSum);
 printf("Sum of digits in odd  places:%d\n",oddSum);
}