题解 | #10进制 VS 2进制#
10进制 VS 2进制
https://www.nowcoder.com/practice/fd972d5d5cf04dd4bb4e5f027d4fc11e
难点在于字符串实现加法和乘除
#include <iostream> #include <vector> using namespace std; string divide(string str) { int remain = 0; string result; for (int i = 0; i < str.size(); i++) { int temp = remain * 10 + str[i] - '0'; remain = temp % 2; char tempChar = (temp / 2 + '0'); result += tempChar; } if (result == "0") return ""; else { int pos = 0; while (result[pos] == '0') pos++; return result.substr(pos); } } string multiple(string str) { string result; int carry = 0; for (int i = str.size() - 1; i >= 0; i--) { int temp = (str[i] - '0') * 2 + carry; carry = temp / 10; char tempChar = (temp % 10 + '0') ; result = tempChar + result; } if (carry != 0) result = "1" + result; return result; } string add(string str, int x) { string result; int carry = x; for (int i = str.size() - 1; i >= 0; i--) { int temp = str[i] - '0' + carry; carry = temp / 10; char tempChar = (temp % 10 + '0'); result = tempChar + result; } if (carry != 0) result = "1" + result; return result; } int main() { string a; while (cin >> a ) { // 注意 while 处理多个 case vector<int> binary; while (a.size() > 0) { binary.push_back((a[a.size() - 1] - '0') % 2); a = divide(a); } string b = "0"; for (int i = 0; i < binary.size(); i++) { b = multiple(b); b = add(b, binary[i]); } cout << b << endl; } } // 64 位输出请用 printf("%lld")