#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <stack>
#include <map>
#include <queue>
#include <cmath>
using namespace std;
queue<int> que;
/**
大数除法
str 一个十进制的大数
x 除数
return 余数
*/
int divide(string& str, int x) {
int size = str.size();
int remainder = 0; //上一轮的余数
for (int i = 0; i < size; i++) {
int cur = str[i] - '0' + remainder * 10; //当前位置的值
if (cur / x == 0) { //这一位不够除, 结果上0
str[i] = '0';
remainder = cur;
} else { //这一位够除
int t = cur / x;
str[i] = '0' + t;
remainder = cur % x;
}
}
//有可能前面有很多0,要去掉
int index;
for (index = 0; index < size; index++) {
if (str[index] != '0') {
break;
}
}
str = str.substr(index);
return remainder;
}
/**
str 十进制的字符串
return 对应翻转的二进制字符串
*/
string decToBin(string str) {
while (true) {
if (str == "") {
break;
}
int t = divide(str, 2);
que.push(t);
}
string bin = "";
while (!que.empty()) {
int t = que.front();
que.pop();
bin += t + '0';
}
//翻转以后前面可能有0,要去掉
int index;
for (index = 0; index < bin.size(); index++) {
if (bin[index] != '0') {
break;
}
}
bin = bin.substr(index);
return bin;
}
/**
字符串乘法
str 乘数1
x 乘数2
return 返回相乘的结果
*/
void mul(string& str, int x) {
//在这里x就是为2
//从末尾开始乘
int carry = 0; //进位
for (int i = str.size() - 1; i >= 0; i--) {
int cur = str[i] - '0'; //当前位的值
cur = cur * x + carry;
if (cur < 10) {
str[i] = cur + '0';
carry = 0;
} else { //有进位
carry = 1;
str[i] = cur - 10 + '0';
}
}
if (carry == 1) {
str.insert(0, 1, '1');
}
}
/**
字符串加法
str 加数1
X 加数2 其实就是1 或者 0
*/
void plus1(string& str, int x) {
if (x == 0) {
return;
} else {
int carry = 0;
for (int i = str.size() - 1; i >= 0; i--) {
int cur = str[i] - '0'; //当前位的值
cur = cur + x + carry;
if (cur < 10) {
str[i] = cur + '0';
carry = 0;
break;
} else { //有进位
carry = 1;
str[i] = cur - 10 + '0';
}
}
if (carry == 1) {
str.insert(0, 1, '1');
}
}
}
/**
二进制换成十进制
bin 二进制字符串
return 对应的十进制
*/
string binToDec(string bin) {
string ret = "0";
for (int i = 0; i < bin.size(); i++) {
mul(ret, 2); //先乘2
int x = bin[i] - '0';
plus1(ret, x); //再相加
}
return ret;
}
int main() {
string dec; //十进制
while (getline(cin, dec)) {
//此时bin为dec的翻转二进制
string bin = decToBin(dec);
string ret = binToDec(bin);
printf("%s\n", ret.c_str());
}
}