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

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

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

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main(){
    int temp;
    vector<int> m1Arr, ip1Arr, ip2Arr;
    while(cin >> temp){
        m1Arr.push_back(temp);
        if(temp < 0 || temp > 255) {
            cout << 1;
            return 0;
        }
        if(cin.get() == '\n')   break;
    }
    while(cin >> temp){
        ip1Arr.push_back(temp);
        if(temp < 0 || temp > 255) {
            cout << 1;
            return 0;
        }
        if(cin.get() == '\n')   break;
    }
    while(cin >> temp){
        ip2Arr.push_back(temp);
        if(temp < 0 || temp > 255) {
            cout << 1;
            return 0;
        }
        if(cin.get() == '\n')   break;
    }
    //上面完成了输入以及非法判断
    //下面完成10进制转换为2进制
    vector<int> m1ArrIn2, ip1ArrIn2, ip2ArrIn2;
    bool key1 = true;
    bool key2 = true;
    while(!m1Arr.empty()){
        for(int i = 1; i <= 8; i++){
            if(m1Arr.back() == 0){
                m1ArrIn2.push_back(0);
                key2 = false;
                continue;
            }
            m1ArrIn2.push_back(m1Arr.back() % 2);
            m1Arr.back() /= 2;
        }
        m1Arr.pop_back();
    }
    bool key = true;
    for(int i = m1ArrIn2.size() - 1; i >= 0; i--){
        if(m1ArrIn2[i] == 0){
            key = false;
        }
        if(m1ArrIn2[i] == 1 && key == false){
            cout << 1;
            return 0;
        }
    }
    while(!ip1Arr.empty()){
        for(int i = 1; i <= 8; i++){
            if(ip1Arr.back() == 0){
                ip1ArrIn2.push_back(0);
                continue;
            }
            ip1ArrIn2.push_back(ip1Arr.back() % 2);
            ip1Arr.back() /= 2;
        }
        ip1Arr.pop_back();
    }
    while(!ip2Arr.empty()){
        for(int i = 1; i <= 8; i++){
            if(ip2Arr.back() == 0){
                ip2ArrIn2.push_back(0);
                continue;
            }
            ip2ArrIn2.push_back(ip2Arr.back() % 2);
            ip2Arr.back() /= 2;
        }
        ip2Arr.pop_back();
    }
    for(int i = 0; i < 32; i++){
        if(m1ArrIn2[i] + ip1ArrIn2[i] == 2 && m1ArrIn2[i] + ip2ArrIn2[i] != 2){
            cout << 2;
            return 0;
        }
        if(m1ArrIn2[i] + ip1ArrIn2[i] != 2 && m1ArrIn2[i] + ip2ArrIn2[i] == 2){
            cout << 2;
            return 0;
        }
    }
    cout << 0;
    return 0;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务