题解 | #判断两个IP是否属于同一子网#

判断两个IP是否属于同一子网

https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218

#include <iostream>
#include <array>
using namespace std;

bool checkValid(const array<uint, 4>& arr) {
    for (int i = 0; i < 4; i++) {
        if (arr.at(i) > 255) {
            return false;
        }
    }
    return true;
}

bool checkMaskValid(const array<uint, 4>& arr) {
    uint ipMask = arr[0] << 24 | arr[1] << 16 | arr[2] << 8 | arr[3];
    bool flag = false;
    int mask = 0x01;
    for (; mask != 0; mask <<= 1) {
        if (flag) {
            if ((ipMask & mask) == 0) {
                return false;
            }
        }
        if ((ipMask & mask) > 0) {
            flag = true;
        }
    }
    return true;
}

int main() {
    array<uint, 4> m = {0};
    char ch;
    while (cin >> m[0] >> ch >> m[1] >> ch >> m[2] >> ch >> m[3]) {
        array<uint, 4> p1 = {0}, p2 = {0};
        cin >> p1[0] >> ch >> p1[1] >> ch >> p1[2] >> ch >> p1[3];
        cin >> p2[0] >> ch >> p2[1] >> ch >> p2[2] >> ch >> p2[3];
        if (checkMaskValid(m) && checkValid(m) && checkValid(p1) && checkValid(p2)) {
            uint ipMask = m[0] << 24 | m[1] << 16 | m[2] << 8 | m[3];
            uint ip1 = p1[0] << 24 | p1[1] << 16 | p1[2] << 8 | p1[3];
            uint ip2 = p2[0] << 24 | p2[1] << 16 | p2[2] << 8 | p2[3];
            if ((ipMask & ip1) == (ipMask & ip2)) {
                cout << "0" << endl;
            } else {
                cout << "2" << endl;
            }
        } else {
            cout << "1" << endl;
        }
    }
    return 0;
}

全部评论

相关推荐

10-14 21:00
门头沟学院 Java
吃花椒的狸猫:这个人说的倒是实话,特别是小公司,一个实习生哪里来的那么多要求
点赞 评论 收藏
分享
梦倩倩:同学,瞅瞅我司,医疗独角兽,校招刚开,名额有限,先到先得,****最新动态,绿灯直达,免笔试~
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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