//本题位数较大,超出了long long范围,而在十进制转二进制的过程中需不断除进制2,这个过程需借助字符串处理 //从最高位开始处理,currnet表示当前正在处理的位, (current / 进制) 得出商对应的当前位,若有余数,则余数乘10并加上下一位,循环遍历完所有的字符,remain初始化为0 #include <iostream> #include <vector> #include <string> using namespace std; string divide(string str) { int remain = 0; for (int i = 0; i < str.size(); i++) { int current = remain * 10 + str[i] - '0'; str[i] = current / 2 + '0'; remain = current % 2; } int pos = 0; while (str[pos] == '0') { pos++; } return str.substr(pos); } int main() { string str; // while (scanf("%s", &str) != EOF) { while (cin >> str) { // if (str == "0") { // printf("0"); // } vector <int> vec; while (str!="") { //一般是除数为0时跳出循环,但由于除法去掉了前导0,就会返回空串 int remain = str[str.size() - 1]-'0'; vec.push_back(remain % 2); str = divide(str); } for (int i = vec.size() - 1; i >= 0; i--) { printf("%d", vec[i]); //vec.pop_back(); } printf("\n"); } return 0; }