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
Source
mathlover
想不出更好的算法了,直接暴力。。
/*
* this code is made by clearlemon
* Problem: 1095
* Verdict: Accepted
* Submission Date: 2014-06-10 20:44:42
* Time: 16 MS
* Memory: 1672 KB
*/
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
int t;
cin>>t;
long long a;
char s[111];
while(t--)
{
scanf("%lld",&a);
int g=0;
memset(s,0,sizeof(s));
while(a)
{
if(a&1)
s[g++]='1';
else
s[g++]='0';
a>>=1;
}
//cout<<s<<endl;
int m=0;
while(s[m]==0)
{
m++;
}
//cout<<m<<" "<<g<<endl;
long long ans=1;
a=0;
for(int i=g-1;i>=m;i--)
{
a+=((s[i]-'0')*ans);
ans*=2;
}
cout<<a<<endl;
}
return 0;
}