C语言-添加产品的数字(即不是产品本身)

时间:2019-03-07 08:00:02

标签: c

我希望计算以下总和,但要使用产品位数,而不是产品本身:

这些是初始值:

2 + 12 + 8 = 22

但是我想要实现的是以下内容,因此数字12实际上被分别视为1和2

2 +1 +1 2 + 8 = 13

使用C语言是否可以使用公式来执行此任务?

3 个答案:

答案 0 :(得分:1)

假设您可以执行一个值数组:

#include <stdio.h>

unsigned sum(const unsigned * a, size_t sz)
{
  unsigned sum = 0;

  while (sz--) {
    unsigned v = *a++;

    while (v) {
      sum += v%10;
      v /= 10;
    }
  }

  return sum;
}

int main()
{
  const unsigned a[] = { 2, 12, 8 };

  printf("sum = %u\n", sum(a, sizeof(a)/sizeof(*a)));
}

编译和执行:

/tmp % gcc -pedantic -Wextra s.c
/tmp % ./a.out
sum = 13

答案 1 :(得分:1)

如果<c8y-item-selector items="dataArray" items-selected="defaultselected" required on-apply="onApply(data)"text-apply="Apply"class="ng-isolate-scope"></c8y-item-selector>是唯一的其他令牌,那么您可以忽略它,而仅对流中的数字求和。所以

+

是一种方法。 #include <stdio.h> #include <ctype.h> // for isdigit int main(void) { char* s = "2 + 12 + 8"; int total = 0; for (; *s; ++s){ if (isdigit((unsigned char)*s)){ total += *s - '0'; } } printf("%d\n", total); } 是将*s - '0';数字转换为其数值的惯用方式。循环终止条件是字符串char中的NUL终止符。

如果您希望在术语之间使用其他运算符,这当然不是最好的方法。此时,您需要构建一个完整的表达式解析器(例如,基于Kernighan&Ritchie的示例的解析器)。

答案 2 :(得分:-1)

此任务没有直接公式,但是您可以在单独的函数中执行此任务,并在需要时使用该函数。 这是两个简单的解决方案,具体取决于输入的类型。

如果输入字符串的形式(即“ 2 + 12 + 8”),则代码为-

#include <stdio.h>

int main()
{
    char str[] = "2 + 12 + 8";
    int sum=0;

    for (int i = 0; i < strlen(str); i++) {
        if (str[i] >= '0' && str[i] <= '9')
            sum += str[i] - '0';
    }
    printf("%d",sum);
    return 0;
}

如果输入采用 Array 的形式(即[2,12,8]),则代码为-

#include <stdio.h>

int main()
{
    int num[] = {2, 12, 8};
    int sum=0;
    int length = sizeof(num) / sizeof(num[0]);

    for (int i = 0; i < length; i++) {
        while (num[i]) {
            sum += num[i] % 10;
            num[i] /= 10; 
        }
    }
    printf("%d",sum);
    return 0;
}