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;  }