我希望计算以下总和,但要使用产品位数,而不是产品本身:
这些是初始值:
2 + 12 + 8 = 22
但是我想要实现的是以下内容,因此数字12实际上被分别视为1和2
2 +1 +1 2 + 8 = 13
使用C语言是否可以使用公式来执行此任务?
答案 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;
}