*、/、+、-、% 演算子を使わずに数値を 3 で割る 質問する

*、/、+、-、% 演算子を使わずに数値を 3 で割る 質問する

*、、、、、演算子を使用せずに数を 3 で割るにはどうすればよいでしょう/か?+-%

数値は符号付きでも符号なしでもかまいません。

ベストアンサー1

これは単純な機能これは目的の操作を実行します。ただし、+演​​算子が必要なので、あとはビット演算子を使用して値を追加するだけです。

// replaces the + operator
int add(int x, int y)
{
    while (x) {
        int t = (x & y) << 1;
        y ^= x;
        x = t;
    }
    return y;
}

int divideby3(int num)
{
    int sum = 0;
    while (num > 3) {
        sum = add(num >> 2, sum);
        num = add(num >> 2, num & 3);
    }
    if (num == 3)
        sum = add(sum, 1);
    return sum; 
}

Jim がコメントしたように、これが機能するのは次の理由からです:

  • n = 4 * a + b
  • n / 3 = a + (a + b) / 3
  • つまりsum += a、、、n = a + bを繰り返す

  • a == 0 (n < 4)sum += floor(n / 3);すなわち1のとき、if n == 3, else 0

おすすめ記事