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",÷nd);
int temp; // 定义一个循环时的临时变量
int sum=0; // 存储偶数的数值和
while(dividend>0){
temp=dividend%10; // 取出最低位
if(temp%2==0){
sum+=temp;
}
dividend/=10;
}
printf("%d\n\n",sum);
}
}