题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
#include <bitset> #include <iostream> #include <regex> #include <string> #include <vector> #include <bits/stdc++.h> using namespace std; long long ip_add (vector<string> vec){ string str; for (auto it : vec){ int n = stoi(it); bitset<8> foo(n); str += foo.to_string(); } bitset<32> foo_add(str); long long add = foo_add.to_ulong(); return add; } string add_ip(string str_add){ long long n = stol(str_add); bitset<32> foo(n); string add = foo.to_string(); vector<string> vec; for (int i = 0; i < 4; i++){ vec.push_back(add.substr(i * 8, 8)); } vector<int> tmp(4); for (int i = 0; i < 4; i++){ bitset<8> foo(vec[i]); tmp[i] = foo.to_ulong(); } string ip; for (int i = 0; i < 4; i++){ ip += to_string(tmp[i]) + '.'; } ip.erase(ip.end() - 1); return ip; } int main() { string str_ip, str_add; cin >> str_ip >> str_add; string tmp; vector<string> vec; for (int i = 0; i < str_ip.size(); i++){ if (str_ip[i] == '.'){ vec.push_back(tmp); tmp = ""; } else { tmp += str_ip[i]; } if (i == str_ip.size() - 1) vec.push_back(tmp); } long long result = ip_add(vec); string ip = add_ip(str_add); cout <<result<<endl<<ip; } // 64 位输出请用 printf("%lld")