如何在C语言中将整数中的数字提取出来?

3

假设我有一个整数叫做SIN,scanf输入接收到了193456787。

所以SIN = 193456787;

我想要做的是将第一个数字之后的所有数字加起来。

所以9 + 4 + 6 + 8 = 27

有没有人能够向初学者解释一下如何做到这一点?


在第一项后,我发现了93456787,但你只加起来了9468,请明确一下。 - venki
1
@venki 我想要从整型SIN中特定地提取除第一个数字外的每个数字,并将它们相加,这恰好是9 + 4 + 6 + 8 = 27。如果我表达不够清晰请见谅。 - Derrick Rose
1
到目前为止,我已经理解了:找到序列中的第一个“1”。然后将每两个数字相加。就这样,对吧? - 3442
1
我只是用1作为示例,我的真正意思是第一个数字,所以如果是345678,我想要4 + 6 + 8 = 18。 - Derrick Rose
那么我的程序中的 >= 10 是正确的吗? - 3442
显示剩余7条评论
3个回答

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的启发

,与IT技术有关的内容。

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

3
注意: 如果这不是您的意图,请在评论中说明,因为您的问题有点模糊不清。
#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);
}

肯定是myNumber >= 0,否则你会跳过最后一位数字的。 - Tommy
你的程序完全不同。而且 OP 没有要求程序,他只是要求建议开始。 - venki
1
@venki:楼主的英语水平不太好,因此很难理解他的意思。我明确声明,如果楼主说的是不同的话,我的答案可能完全与主题无关。 - 3442
你说得对。不过我现在觉得他想要每隔一个数字的和。所以是第二、第四、第八、第十等等的数字的和。 - Tommy
编辑:已修改。我认为现在可以了 :)。 - 3442

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接