1. 程式人生 > >洛谷3908 異或之和

洛谷3908 異或之和

原題連結

遇到這種數學題,像我這種數學很爛的當然是上來就打表啦。

//以下是前30個數的表。
     1 ->      1
     2 ->      3
     3 ->      0
     4 ->      4
     5 ->      1
     6 ->      7
     7 ->      0
     8 ->      8
     9 ->      1
    10 ->     11
    11 ->      0
    12 ->     12
    13 ->      1
    14 ->     15
    15 ->      0
    16 ->     16
    17 ->      1
    18 ->     19
    19 ->      0
    20 ->     20
    21 ->      1
    22 ->     23
    23 ->      0
    24 ->     24
    25 ->      1
    26 ->     27
    27 ->      0
    28 ->     28
    29 ->      1
    30 ->     31

很容易看出來有四種情況。

  1. \(n \% 4 = 0\),則答案為\(n\)
  2. \(n \% 4 = 1\),則答案為\(1\)
  3. \(n \% 4 = 2\),則答案為\(n + 1\)
  4. \(n \% 4 = 3\),則答案為\(0\)

我數學差,別問我為什麼
於是很愉快的\(A\)了。

#include<cstdio>
using namespace std;
int main()
{
    long long n, x;
    scanf("%lld", &n);
    x = n % 4;
    printf("%lld", x ^ 3 ? !x ? n : x ^ 1 ? n + 1 : 1 : 0);
    return 0;
}