我怎样才能在 C 中具体取出整数中的数字?

How can I specifically take out numbers in an integer, in C?

假设我有一个名为 SIN 的整数,scanf 输入接收到 193456787。

所以SIN = 193456787;

我想做的是将第一个数字之后的所有其他数字相加。

所以 9 + 4 + 6 + 8 = 27

有人可以向初学者解释一下如何做到这一点吗?

注意:如果这不是您想要的,请发表评论,因为您的问题有点模棱两可。

#include <stdio.h>

int main() {
    unsigned number;
    scanf("%u\n", &number);

    unsigned result = 0;

    unsigned tmp = number;
    unsigned numberOfDigits = 0;
    do
        numberOfDigits++;
    while((tmp /= 10) != 0);

    if(numberOfDigits % 2 != 0)
        number /= 10;

    while(number >= 10) {
        result += number % 10;
        number /= 100;    // Skip two digits
    }

    printf("%u\n", result);
}

我的解决方案

#include <stdio.h>

int main()
{
    int SIN = 193456787;
    int a = 0, b = 0, cnt = 0;
    while (SIN > 0) {
        if (cnt % 2) b += SIN % 10;
        else a += SIN % 10;
        cnt++;
        SIN /= 10;
    }
    printf("%d\n", cnt%2 ? b : a);
    return 0;
}

打印数字,然后每隔一个数字求和

int sum_every_other_digit_after_first(unsigned long long x) {
  char buf[sizeof x * CHAR_BIT];
  sprintf(buf, "%llu", x);
  char *p = buf;
  int sum = 0;
  while (*p) {
    p++;  // Skip digit
    if (*p) {  
      sum += *p++ - '0';
    }
  }
  return sum;
}

或受

启发
int sum_every_other_digit_after_first(unsigned long long x) {
  int esum = 0;
  int osum = 0;
  while (x > 0) {
    esum += x%10;
    x /= 10;
    if (x == 0) {
      return osum;
    }
    osum += x%10;
    x /= 10;
  }
  return esum;
}

为了好玩,递归解决

int sum_every_other_digit_after_first_r(unsigned long long x, int esum, int osum) {
  if (x >= 100) {
    int digit2 = x % 100;
    esum += digit2 % 10;
    osum += digit2 / 10
    return sum_every_other_digit_after_first_r(x / 100, esum, osum);
  }
  if (x >= 10) {
    return esum + x % 10;
  }
  return osum;
}
sum_every_other_digit_after_first_r(1234567,0,0) --> 12