『题解』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 掉这题了,此题输入输出量很大,所以建议用 scanf
和 printf
或快读快写。
代码
#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;
}