Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using ull=unsigned long long;
- using namespace std;
- int main() {
- string s,u;
- ull n;
- char p='0';
- cin>>n;
- s=bitset<64>(n).to_string();
- if(s[s.size()-1]=='0')
- u+='0';
- if(s[s.size()-1]=='1')
- u+='1';
- for(int i=s.size()-2;i>=0;--i){
- if(s[i]=='0'){
- if(p=='1'){
- if(u[u.size()-1]=='0')
- u+='1';
- else
- u+='0';
- }
- else{
- if(u[u.size()-1]=='0')
- u+='0';
- else{
- u+='1';
- p='1';
- }
- }
- }
- else{
- if(p=='1'){
- if(u[u.size()-1]=='0') {
- u += '0';
- p = '0';
- }
- else
- u+='1';
- }
- else{
- if(u[u.size()-1]=='0')
- u+='1';
- else
- u+='0';
- }
- }
- }
- u+=p;
- reverse(u.begin(),u.end());
- auto it=u.begin();
- while((*it)=='0')
- ++it;
- ull sum=0;
- u.erase(u.begin(),it);
- //cerr<<u.size()<<' '<<s.size();
- int step=u.size()-1;
- for(int i=0;i<u.size();++i){
- if(u[i]=='1')
- sum+=powl(2ull,step);
- --step;
- }
- cout<<sum;
- }
Advertisement
Add Comment
Please, Sign In to add comment