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