【C++】3のつく整数の取得

未分類

3のつく整数の取得する方法の備忘録です.

ある競技プログラミングの問題を問いている際に必要になったことなので記事にしておきます.
(その問題を解いている時には, 1 ~ 31の中で3のつく整数を取得する必要があったのですが, 個数が少なかったので人力で入力しました…)

やりたいこと
整数の入力\( N \)があったときに, \( 1 \sim N \) までの3のつく整数を全て出力したい.

結論
下記の通り.

#include<bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;   // 入力の受け取り

    vector ans;    // ans vectorに答えを追加していく.

    for (int i = 0; i < n + 1; i++) {   // 0 ~ n の数を順に調べる.
        int digit = 0;      // iが何桁の整数であるかを管理する変数digit
        int num = i;        // iの桁数を知りたいが, iを直接いじりたくないのでnumに代入
        while(num != 0) {   // 桁数を数えるループ. numが0になったら終了する.
            num /= 10;      // ex) num = 1234 だった場合, num = 123 となる.
            digit++;
        }

        int num2 = i;   // iの各桁が3かどうかを知りたいが, ここもiを直接いじりたくないのでnum2に代入
        for (int j = 0; j < digit; j++) {   // iの桁数回ループさせる. ex) i = 1234 の場合, 4回ループさせる.
            if (num2 % 10 == 3) {           // 1の位が3であった場合, ansに追加し, そのループは抜ける.
                ans.emplace_back(i);
                break;
            }
            num2 /= 10;     // 次の位を調べるためにnum2をいじる. ex) num2 = 1234 の場合, num2 = 123となる.
        }
    }

    for (auto ele : ans) {  // ans vectorの要素1つずつ出力.
        cout << ele << endl;
    }

    return 0;
}

コメント