此题考查十进制和二进制的转换。
#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;
} 
京公网安备 11010502036488号