合理使用算法运用C语言, 计算出给定数各个位上数字为偶数的和怎么做?

Problem Description
有一天, KIKI 收到一张奇怪的信, 信上要KIKI 计算出给定数各个位上数字为偶数的和.
eg. 5548
结果为12 , 等于 4 + 8

KIKI 很苦恼. 想请你帮忙解决这个问题.

Input
输入数据有多组,每组占一行,只有一个数字,保证数字在INT范围内.

Output
对于每组输入数据,输出一行,每两组数据之间有一个空行.

Sample Input
415326
3262

Sample Output
12

10

解决方案:
创建一个数值列表(堆);
在while循环中输入各个数据,保存为字符串,判断是否结束循环,否则拓展列表,提取数据中所有偶数,将所有偶数加至当前结果;
输出并释放堆。

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdint.h>
#include<ctype.h>
#include<stdbool.h>

int main(void)
{
    puts("开始输入数据\n敲回车结束输入");
    uint8_t* num_list=NULL;
    uint16_t list_count=0;
    while(true)
    {
        char num[12];
        *num='\0';
        fgets(num,sizeof(num),stdin);
        fflush(stdin);
        if(*num=='\n'||*num=='\0')
            break;
        num_list=realloc(num_list,++list_count*sizeof(uint8_t));
        assert(num_list);
        num_list[list_count-1]=0;
        for(char* i=num; *i!='\n'&&*i!='\0'; ++i)
        if(isdigit(*i)&&(*i-'0')%2==0)
            num_list[list_count-1]+=*i-'0';
    }
    for(uint16_t i=0; i<list_count; ++i)
        printf("%hhu\n",num_list[i]);
    free(num_list);
    return 0;
}

基本思路:
大循环开始
输入整数a
获取a的每个位
如果是偶数
累加
大循环结束
(大循环是为了不断输入整数)

#include <iostream>
#include<stdio.h>
using namespace std;

int main()
{
    int a;
    while(true)//大循环
    {
        scanf("%d",&a);
        int sum = 0;//声明sum同时清0
        while(a>0)
        {
            int l = a%10;//获取个位数
            if(l%2==0)
            {
                sum+=l;
            }
            a /= 10;//将a以十进制左移,如1234会变为123
        }
        printf("%d\n",sum);
    }
}

#include<stdio.h>

void main(){
    int dividend;  // 定义被除数
    while(1){
        scanf("%d",&dividend);
        int temp;  // 定义一个循环时的临时变量
        int sum=0; // 存储偶数的数值和
        while(dividend>0){
            temp=dividend%10;  // 取出最低位
            if(temp%2==0){
                sum+=temp;
            }
                        dividend/=10;
        }
        printf("%d\n\n",sum);
    }
}