AtCoder Beginner Contest 186 C - Unlucky 7
問題
1以上N以下の整数のうち、10進法で表しても8進法で表しても7を含まないような数はいくつありますか?
制約
- Nは整数である。
考えたこと
制約より、までならばすべてを確認しても間に合うと判断しました。8進法への変換方法は検索しました。
コード
#define _GIBCXX_DEBUG #include <bits/stdc++.h> using namespace std; #define rep(i, n) for (int i = 0; i < (n); ++i) #define all(v) v.begin(), v.end() using namespace std; using ll = long long; int main(void) { int N; cin >> N; int ans = 0; char s[100]; for (int i = 1; i <= N; ++i) { sprintf(s, "%u%o", i, i); if (strchr(s, '7') == NULL) ++ans; } cout << ans << endl; return 0; }
解説動画を見て
10で割った余りから10進法の一桁ずつ取得できます。8で割ればすむようです。基数を変えて応用ですね。
関数にせず、for(int base : (8, 10))で処理を分けるのはかっこいいです。