#include <iostream> #include <string> #include <vector> #include <algorithm> #include <stack> #include <map> using namespace std; string divide(string str, int x) { //字符串除法 int remainder = 0; //余数 for (int i = 0; i < str.size(); i++) { //当前的除数 = 上一轮的余数 * 10 + 当前第i位的数 int current = remainder * 10 + str[i] - '0'; str[i] = current / x + '0'; //结果的第i位 remainder = current % x; //保留这一轮的余数 } int pos = 0; while (str[pos] == '0') { //找首个非0下标 pos++; } return str.substr(pos); //删除前置多余的0 } int main() { stack<int> mystack; string str; //30位的数字 while (getline(cin, str)) { while (str.size() != 0) { //最低位的值,因为是除2的话,其实只用看最后一位是奇数还是偶数 int last = str[str.size() - 1] - '0'; mystack.push(last % 2); //取模 str = divide(str, 2); //整除 } while (!mystack.empty()) { //依次输出 int t = mystack.top(); mystack.pop(); printf("%d", t); } printf("\n"); } } // 64 位输出请用 printf("%lld")