Description
作为女神,EOF是很喜欢照镜子的~同样在数学中,EOF也是很喜欢相反数的。不过她既然是女神,她认知的相反数和我们凡人怎么能一样呢?
给定一个十进制数A,EOF女神定义的相反数就是把这个数转化为二进制之后,忽略高位的0,然后作轴对称,例如对于十进制的数123(1111011),它的相反数是111(1101111)。EOF女神就打算以此来考验前来觐见的勇士。
Input
首先是一个正整数T,表示测试数据的组数。
对于每组测试数据,只有一个正整数A(A<=10^18)
Output
对于每组测试数据,输出EOF女神眼中相反数。
Sample Input
2 123 5201314
Sample Output
1112284921
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <cmath> #include <vector> using namespace std; typedef long long LL; int main() { int t; scanf("%d",&t); while(t--) { LL n; scanf("%lld",&n); string s=""; while(n) { if(n&1) s+="1";//如果n是奇数,s+=“1”。n&1是n和1做“按位与”运算,1的二进制只有末位是1,所以n&1就是只保留n的末位(二进制)。n&1就表示了n的奇偶性。 else s+="0"; n/=2; } LL ans=0,tmp=1; int i=s.size()-1; while(s[i]!='1' && i>=0) i--; for(; i>=0; i--) { if(s[i]=='1') { ans+=tmp; } tmp*=2; } printf("%lld\n",ans); } return 0; }