特别数的和
一、题目内容
题目描述
小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。请问,在 1 到 n 中,所有这样的数的和是多少?
输入
输入一行包含两个整数 n。
对于 20% 的评测用例,1 ≤ n ≤ 10。
对于 50% 的评测用例,1 ≤ n ≤ 100。
对于 80% 的评测用例,1 ≤ n ≤ 1000。
对于 所有 的评测用例,1 ≤ n ≤ 10000。
输出
输出一行,包含一个整数,表示满足条件的数的和
样例输入
40
样例输出
574
二、思路分析
将1~n分别用字符串存储,然后看字符串中是否有 2、0、1、9这几个数字,如果有的话,将这个数字保存并累加求和。
三、代码实现
#include <bits/stdc++.h>
using namespace std;
int n;
int sum ;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
int t = i; //临时保存该数字
string str = ""; //初始化为空字符串
str = to_string(i); //数字转换为字符串
for (int j = 0; j < str.length(); j++) { //查找字符串中是否有2、0、1、9
if (str[j] == '2' || str[j] == '0' || str[j] == '1' || str[j] == '9') {
sum += t;
break;
}
}
}
cout << sum << endl;
return 0;
}
加油哦! 如有错误和需要改进完善之处,欢迎大家纠正指教。