[蓝桥杯 2019 省 B] 特别数的和
题目描述
小明对数位中含有 、、、 的数字很感兴趣(不包括前导 ),在 到 中这样的数包括 、、、 至 、 和 ,共 个,他们的和是 。
请问,在 到 中,所有这样的数的和是多少?
输入格式
输入一行包含一个整数 。
输出格式
输出一行,包含一个整数,表示满足条件的数的和。
样例 #1
样例输入 #1
40
样例输出 #1
574
提示
对于 的评测用例,。
对于 的评测用例,。
对于 的评测用例,。
对于所有评测用例,。
蓝桥杯 2019 省赛 B 组 F 题。
思路
首先从输入中读取整数。
定义一个长整型变量来存储所有满足条件的数的和,初始值为0。
接着,通过一个从1到的循环,对每一个整数进行处理。在处理每一个整数时,复制的值给,然后通过一个do-while循环,检查的每一位是否为2、0、1或9。这个检查是通过取除以10的余数(也就是的个位数)实现的。如果的个位数是2、0、1或9,那么将加到上,并结束这个do-while循环。否则,将除以10,去掉的个位数,然后继续检查下一位。这个do-while循环会一直进行,直到变为0,即检查完的所有位。
最后,输出,也就是所有满足条件的数的和。
AC代码
#include <iostream>
#define AUTHOR "HEX9CF"
using namespace std;
using ll = long long;
int n;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
ll ans = 0;
for (int i = 1; i <= n; i++) {
int j = i;
do {
int t = j % 10;
if (t == 2 || t == 0 || t == 1 || t == 9) {
// cout << i << "\n";
ans += i;
break;
}
// cout << j % 10 << " ";
j /= 10;
} while (j > 0);
// cout << "\n";
}
cout << ans << "\n";
return 0;
}