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