题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
http://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
下次会更好
#include <bits/stdc++.h>
using namespace std;
bool isValud(vector<int>ip){
if(ip.size()<4)return false;
for(auto it:ip){
if(it<0 ||it>255)return false;
}
return true;
}
bool ismaskValud(vector<int>ip){
string s;
vector<bitset<8>>bit;
for(auto it:ip){
bit.push_back(bitset<8>(it));
}
for(auto it: bit){
s+=it.to_string();
}
if(s=="00000000000000000000000000000000")return false;
for(int i = 0;i<s.size();i++){
if(s[i]=='1'){
if(i>=1 && s[i-1] == '0')
return false;
}
}
return true;
}
int main(int argc, char* argv[]){
vector<int>mask;
vector<int>ip1;
vector<int>ip2;
string s,s1,s2,s3;
cin>>s1>>s2>>s3;
istringstream IN(s1);
while(getline(IN, s,'.')){
mask.emplace_back(atoi(s.c_str()));
}
IN = istringstream(s2);
while(getline(IN, s,'.')){
ip1.emplace_back(atoi(s.c_str()));
}
IN = istringstream(s3);
while(getline(IN, s,'.')){
ip2.emplace_back(atoi(s.c_str()));
}
if(!isValud(mask) || !ismaskValud(mask) || !isValud(ip1) ||!isValud(ip2)) {cout<<1<<endl;return 0;}
string res1="",res2="";
for(int i=0;i<4;i++){
res1+=to_string(mask[i]&ip1[i]);
res2+=to_string(mask[i]&ip2[i]);
}
if(res1 == res2){
cout<<0<<endl;
}
else
cout<<2<<endl;
return 0;
}
查看1道真题和解析