//土尔逊Torson 编写于2023/5/04 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstdio> #include <string> #include <vector> using namespace std; string Divide06001(string str, int x) { //字符串除法 int remainder = 0; //保存余数 for (int i = 0; i < str.size(); ++i) { int current = remainder * 10 + str[i] - '0'; str[i] = current / x + '0'; remainder = current % x; } int pos = 0; while (str[pos] == '0') { //寻找首个非0下标 pos++; } return str.substr(pos); //删除前置多余的0 } string Multiple(string str, int x) { //字符串乘法 int carry = 0; //保存进位 for (int i = str.size() - 1; i >= 0; --i) { int current = x*(str[i] - '0') + carry; str[i] = current % 10 + '0'; carry = current / 10; } if (carry != 0) { //仍有进位 str = "1" + str; } return str; } string Add(string str, int x) { //字符串加法 int carry = x; for (int i = str.size() - 1; i >= 0; --i) { int current = (str[i] - '0') + carry; str[i] = current % 10 + '0'; carry = current / 10; } if (carry != 0) { //仍有进位 str = "1" + str; } return str; } int main() { string str; while (cin >> str) { vector<int> binary; while (str.size() != 0) { int last = str[str.size() - 1] - '0'; //最低位的值 binary.push_back(last % 2); //取模运算 str = Divide06001(str, 2); //整除运算 } string answer = "0"; for (int i = 0; i < binary.size(); ++i) { answer = Multiple(answer, 2); //乘法运算 answer = Add(answer, binary[i]); //加法运算 } cout << answer << endl; } system("pause"); return EXIT_SUCCESS; } // 64 位输出请用 printf("%lld")