#include <bits/stdc++.h> #include <bits/types/struct_tm.h> #include <string> using namespace std; // 字符串做除发, 跟手写除法类似, 首先从字符左边一直到右边。 分为两种情况:1.能被x整除,那么就直接得到除数,2.否则不能整除,需要在把模数求得的数*10 + 当前的数 再除。 void divid ( string & s, int x) { // if() int rem = 0 ; for (int i = 0 ; i < s.size() ; ++ i) { // 做除法 int t = rem * 10 + s[i] - '0' ; s[i] = t / x + '0'; rem = t % x; // t } int pos = 0 ; while(s[pos] == '0') { pos++ ; } // cout<< "pos"<<pos <<endl ; // if(pos) // if(pos >= s.size()) // { // return string() ; // } // cout<<"s.substr(pos).size() "<<s.substr(pos).size() <<endl; s= s.substr(pos) ; // 为避免有前置0, 找到第一个不为0 // 的 } int main() { string tmp ; vector<int> res; while (cin >> tmp) { res.clear() ; if(tmp.size() == 1 &&tmp[0] == '0') { return 0 ; } while (tmp.size()) { int last = tmp[tmp.size() - 1] - '0' ; res.push_back(last % 2 ) ; // 整个数对某个数(不超过10)取余相当于最后一位对某个数取余。 divid(tmp, 2) ; } for (int i = res.size() - 1; i >= 0 ; --i) { cout << res[i]; } cout << endl ; } } // 64 位输出请用 printf("%lld")