如何在C中专门取出一个整数的数字?

时间:2015-08-27 02:48:23

标签: c algorithm int scanf

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

所以SIN = 193456787;

我想要做的是在第一个数字后添加所有其他数字。

所以9 + 4 + 6 + 8 = 27

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

2 个答案:

答案 0 :(得分:4)

打印数字,然后将每个其他数字相加

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

或受@PageNotFound启发

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

答案 1 :(得分:3)

我的解决方案

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