1465: [蓝桥杯2019初赛]特别数的和
- 2020 年 2 月 26 日
- 筆記
题目
小明对数位中含有2、0、1、9 的数字很感兴趣(不包括前导0)。在1到40中这样的数包括1、2、9、10 至32、39 和40,共28 个,他们的和是574。请问,在1到n 中,所有这样的数的和是多少?
思路
感觉好像之前做过类似的,判断一个数位中是否包括某数字,这个函数写过很多次了,循环取余判断即可,或者字符串判断字串(比较麻烦一点)。这里稍微复习一下string库,但是推荐使用循环取余。
使用string库中的find:
将int转换为string,再进行字符串字串的对比,这里需要注意返回值。
string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos。(返回值可以看成是一个int型的数)。
往年也考过类似题目,传送门:1452: [蓝桥杯2019初赛]平方和
代码
//1465: [蓝桥杯2019初赛]特别数的和 #include <iostream> using namespace std; bool check(int num){ int tmp = num; while(num){ tmp = num % 10; if(tmp == 2 || tmp == 0 || tmp == 1 || tmp == 9) return true; num /= 10; } return false; } int main(){ int sum; int num; cin>>num; for(int i = 1; i <= num; i++){ if(check(i)){ sum += i; } } cout<<sum; return 0; }