题目描述与分析
题目描述:
有一天, 小明收到一张奇怪的信, 信上要小明计算出给定数各个位上数字为偶数的和。
例如:5548,结果为12,等于 4 + 8 。
小明很苦恼,想请你帮忙解决这个问题。
输入描述:
输入数据有多组。每组占一行,只有一个整整数,保证数字在32位整型范围内。
输出描述:
对于每组输入数据,输出一行,每组数据下方有一个空行。
输入示例:
415326
3262
输出示例:
12
10
题目要求我们计算出给定数各个位上数字为偶数的和。
单个数字不像数组可以遍历取到每一位的值,但是可以通过取模运算和整数除法来分解一个整数并获取其各位数字,主要的过程有以下两步:
通过取余num % 10获取最后一位数字,%表示取模/取余运算,即一个整数除以另一个整数后的余数,最后一位是个位,无法被10整除,所以就成了余数,进而可以通过%取余运算取到。
使用整数除法 number /= 10 来去掉 number 的最后一位数字。这个过程会一直重复,直到 number 变成0为止。
代码编写
根据题目要求,需要使用循环来接收多组数据的输入
#include<iostream>
using namespace std;
int main() {
// 声明变量 n, 用于存储输入的整数
int n;
while(cin >> n) {
// 提前定义变量result,存储计算的结果
int result = 0;
}
}
按照题目分析,我们需要使用取模运算和整数除法来获取每一位,直到n变为0
// 直到n == 0 退出循环
while(n != 0) {
// 获取 n 的最后一位数字
int a = n % 10;
// 将整数 n 除以10,以便处理下一位数字
n = n / 10;
}
想要判定是否是偶数(即可以被2整除a % 2 == 0),可以使用if进行判断, 如果是偶数,则累加到result总和上。
// 如果 最后一位数字是偶数
if (a % 2 == 0) {
// 将该数字累加到result中
result += a;
}
当循环结束,按照题目要求的格式将result结果的值输出。
cout << result << endl;
// 每次循环迭代之间输出一个空行
cout << endl;
完整代码如下:
#include<iostream>
using namespace std;
int main() {
// 声明变量 n 和 a,用于存储输入的整数和中间计算的结果
int n, a;
// 读取输入的整数,并将其存储在变量 n
while (cin >> n) {
// 定义变量result,存储计算的结果
int result = 0;
// 对整数 n 的每一位进行处理,直到 n 变成0
while (n != 0) {
// 获取 n 的最后一位数字
a = (n % 10);
// 将整数 n 除以10,以便处理下一位数字
n = n / 10;
// 最后一位是否可以被2整除,如果可以,则是偶数,将其值累加到 result 中
if (a % 2 == 0) result += a;
}
// while 循环完成,将 result 的值输出
cout << result << endl;
// 每次循环迭代之间输出一个空行
cout << endl;
}
}