此题考查十进制和二进制的转换。
#include <bits/stdc++.h> using namespace std; typedef long long LL; inline LL DecStringToDec(string s) { // to int LL dec = 0; for (int i = s.size() - 1; i >= 0; i--) dec += (s[i] - '0') * pow(10, s.size() - 1 - i); return dec; } inline LL BinStringToDec(string s) { LL res = 0; for (int i = s.size() - 1; i >= 0; i--) res += (s[i] - '0') * pow(2, s.size() - 1 - i); return res; } inline string DecToBinString(LL dec) { // to bin string bin = ""; for (; dec; dec /= 2) bin += '0' + dec % 2; //cout << bin << endl; for (; bin.size() < 8; bin += '0'); reverse(bin.begin(), bin.end()); return bin; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); string ip; for (; getline(cin, ip);) { string dec_string; getline(cin, dec_string); // ------- ip to dec // gets binary string string bin_str = ""; string each = ""; for (int i = 0; i < ip.size(); i++) { if (ip[i] != '.') each += ip[i]; else { bin_str += DecToBinString(DecStringToDec(each)); each = ""; } } bin_str += DecToBinString(DecStringToDec(each)); //cout << bin_str << endl; // to decimal cout << BinStringToDec(bin_str) << endl; // -------- dec to ip bin_str = DecToBinString(DecStringToDec(dec_string)); for (; bin_str.size() < 32; bin_str = '0' + bin_str); //cout << bin_str << endl; each = ""; ip = ""; for (int i = 0; i < 32; i++) { each += bin_str[i]; if ((i + 1) % 8 == 0) { ip += to_string(BinStringToDec(each)) + '.'; each = ""; } } cout << ip.substr(0, ip.size() - 1) << endl; } return 0; }