『题解』SPOJ SP32201 RSHIFT - Right Shift

· · 题解

题目传送门

题目大意

给定 n<2^{64},求 n 在二进制下右移 1 位并在最高位补 0 的数在十进制下的值。

多组数据(t \le 5 \times 10^5)。

思路

万恶的 C++ 提供了在二进制下右移 1 位的运算符 >>,于是可以直接用这个了。

注意 n<2^{64},所以需要开 unsigned long long

这样就能 A 掉这题了,此题输入输出量很大,所以建议用 scanfprintf 或快读快写。

代码

#include <iostream>
using namespace std;
int t;
unsigned long long n;

int main(){
    scanf("%d",&t);
    while(t--){
        scanf("%llu",&n);
        printf("%llu\n",n>>1);
    }
    return 0;
}