题解 | #整数与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")
