A - EOF女神的相反数
Time Limit:
2000/1000 MS (Java/Others)
Memory Limit:
128000/64000 KB (Java/Others)
Problem 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
111 2284921
- #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";
- 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;
- }