题目描述
小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。
请问,在 1 到 n 中,所有这样的数的和是多少?
输入格式
输入一行包含一个整数 n。
输出格式
输出一行,包含一个整数,表示满足条件的数的和。
输入输出样例
输入 #1复制
40
输出 #1复制
574
说明/提示
对于 20% 的评测用例,1≤n≤10。
对于 50% 的评测用例,1≤n≤100。
对于 80% 的评测用例,1≤n≤1000。
对于所有评测用例,1≤n≤10000。
蓝桥杯 2019 省赛 B 组 F 题。
解题思路
给的n不大,只有1w,直接暴力破解就可以了。
两种思路:
1.写一个从1到n的循环,每次拿出这个值,用暴力不断取模的方法判断这个数是否是想要的。这里就不写了,大家可以自己写写看。
2.同样的思路,不过这次用string字符串来实现位数是否符合要求的判断,下面给出题解
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
int sum = 0; //要输出的值,储存起来
for (int i = 1;i <= n; i++) //1到n的循环
{
//用一个字符串来接受i,to_string() 函数将其他数据类型转换为string型
string t = to_string(i);
//遍历这个字符串
for (int j = 0; j < t.size(); j++) {
//判断每个位序是否符合要求
if (t[j] == '0' || t[j] == '2' || t[j] == '1' || t[j] == '9')
{
sum += i; //i符合要求,加上去
break; //加完了没必要再遍历,结束循环
}
}
}
cout << sum;
return 0;
}
AC如下: