题解 | #判断两个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;
}

全部评论

相关推荐

牛至超人:把哈工大,再加大加粗,看见闪闪发光的哈工大字样,面试官直接流口水
投递字节跳动等公司6个岗位
点赞 评论 收藏
分享
牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务