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

Tags: