Mephistopheles_

Арифметика 64-битных целых (rucode)

Apr 11th, 2021
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.42 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using ull=unsigned long long;
  3. using namespace std;
  4. int main() {
  5.     string s,u;
  6.     ull n;
  7.     char p='0';
  8.     cin>>n;
  9.     s=bitset<64>(n).to_string();
  10.     if(s[s.size()-1]=='0')
  11.         u+='0';
  12.     if(s[s.size()-1]=='1')
  13.         u+='1';
  14.     for(int i=s.size()-2;i>=0;--i){
  15.         if(s[i]=='0'){
  16.             if(p=='1'){
  17.                 if(u[u.size()-1]=='0')
  18.                     u+='1';
  19.                 else
  20.                     u+='0';
  21.  
  22.             }
  23.             else{
  24.                 if(u[u.size()-1]=='0')
  25.                     u+='0';
  26.                 else{
  27.                     u+='1';
  28.                     p='1';
  29.                 }
  30.             }
  31.         }
  32.         else{
  33.             if(p=='1'){
  34.                 if(u[u.size()-1]=='0') {
  35.                     u += '0';
  36.                     p = '0';
  37.                 }
  38.                 else
  39.                     u+='1';
  40.             }
  41.             else{
  42.                 if(u[u.size()-1]=='0')
  43.                     u+='1';
  44.                 else
  45.                     u+='0';
  46.             }
  47.         }
  48.     }
  49.     u+=p;
  50.     reverse(u.begin(),u.end());
  51.     auto it=u.begin();
  52.     while((*it)=='0')
  53.         ++it;
  54.     ull sum=0;
  55.     u.erase(u.begin(),it);
  56.     //cerr<<u.size()<<' '<<s.size();
  57.     int step=u.size()-1;
  58.     for(int i=0;i<u.size();++i){
  59.         if(u[i]=='1')
  60.             sum+=powl(2ull,step);
  61.         --step;
  62.     }
  63.     cout<<sum;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment