LoginSignup
0
0

More than 1 year has passed since last update.

整数値を偶数にする関数

Posted at

なんで記事に?

思い付いたのですが、調べても案外出ませんでした。
出てくるのは奇遇判定ばかり…。

折角なので書こうと思います。絶対使うことないけど。

※以下のコードはすべて動作確認をしていないので、使用する際はご注意ください。まあ使うことないと思うけど。

いきなりコードかい!

C++ / 記事タイ通りです
// 整数値を偶数にする。
int toEven(
        int  a_num,
        bool a_toZero = false
) {
    // 絶対値を取得。
    int absNum = abs( a_num );
    // 奇数なら偶数にし、さらに入力値がマイナスならマイナスにした値を返す。
    return ( absNum
            + (a_toZero * -2 + 1 * (absNum % 2)) )
            * ((a_num != absNum) * -2 + 1);
}

初心者向け タグを付けたのに競技プログラミングみたいじゃないかい! と思いましたよね?
失礼いたしました…。 一応、速度が出るように、分岐を無くしたからです。速いかどうかは知らん(多分コンパイラに任せるべき)。

てなわけで砕いた奴

可読性はこっちの方が圧倒的に高いですよね。
int toEven(
        int  a_num,
        bool a_toZero = false
) {
    // 絶対値を取得。
    int absNum = abs( a_num ); // 入力値の絶対値
    int res    = absNum; // 戻り値

    // 奇数なら偶数にする。
    if (1 == absNum % 2) {
        // ゼロ側に丸めるなら、1を引いて偶数に。
        if (a_toZero) {
            res -= 1;
        }
        // 1を足して偶数に。
        else {
            res += 1;
        }
    } // if (1 == absNum % 2)

    // 入力値がマイナスだったのなら、
    // 出力値もマイナスにする。
    if ( a_num < 0 ) {
        res *= -1;
    }

    // 値を返す。
    return res;
}

やっていることは簡単で、

  1. absNum % 2 で奇遇判定をする
  2. 奇数なら、 1 足すか引いて偶数にする
    だけです。
    冒頭に書いた「調べて出てくる」ものは、このリストの1番目です。
    そこに、日常で数合わせ等の為に行っている、偶数にする操作を加えただけです。

一応関数の説明

XAML でも JavaDoc でもない形式なのでご注意を。

// summary: 整数値を偶数にする。
// param a_num   : もとの整数。
// param a_toZero: 0 に近い数にするか。
//     true なら 0 に近いほうの偶数にし、
//     false なら 0 から遠いほうの偶数にする。
// return: 整数の偶数値を返す。

最後に

もし何かに使う機会があったり、同じ処理をするコードを使ったことがある人は、良ければコメントに書いていってください。
この筆者は、どうやら絶対に使わないと思っているようなので、教えてあげてください。
ま、一応画像サイズは偶数が好ましいことが多いので、そこで使ったりしますけどね。

0
0
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0