#include <iostream> #include <vector> #include <algorithm> using namespace std; vector<int> div(vector<int> &A,int b,int &r){ vector<int> C;//存商 r=0; for(int i=A.size()-1;i>=0;i--){ r=r*10+A[i]; C.push_back(r/b);//...百十个 r%=b; } reverse(C.begin(),C.end());//个十百千万... //去除前导零 while(C.size()>1&&C.back()==0) C.pop_back(); return C; } vector<int> mul(vector<int> &A,int b){ int t=0;//进位 vector<int> C; for(int i=0;i<A.size();i++){ t+=A[i]*b; C.push_back(t%10);//个十百千万... t/=10; } while(t){ C.push_back(t%10); t/=10; } return C; } vector<int> add(vector<int> &A,int b){ int t=b; vector<int> C; for(int i=0;i<A.size();i++){ t+=A[i]; C.push_back(t%10);//个十百千万... t/=10;//进位 } while(t){ C.push_back(t%10); t/=10; } return C; } int main() { string a; cin>>a; vector<int> A; for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');//个十百千万... int r;//余数 vector<int> Y;//存余数 if(a.size()==1&&a[0]=='0') Y.push_back(0); while(A.size()>1||A.back()){ A=div(A,2,r); Y.push_back(r); } vector<int> res={0}; for(int i=0;i<Y.size();i++){ res=mul(res,2); res=add(res,Y[i]); } // for(int i=Y.size()-1;i>=0;i--) cout<<Y[i]; // cout<<endl; for(int i=res.size()-1;i>=0;i--) cout<<res[i]; return 0; }