#include<iostream>
#include<string>
#include<vector>
using namespace std;
string func(int n) {
string str;
int temp;
while (n) {
temp = n % 2;
string c = to_string(temp);
str.insert(0, c);
n /= 2;
}
for (int i = str.size(); i < 8; i++) {
string c("0");
str.insert(0, c);
}
return str;
}
int main() {
vector<int> ip1(4, 0), ip2(4, 0);
vector<int> mask(4, 0);
char c;
while (cin >> mask[0] >> c >> mask[1] >> c >> mask[2] >> c >> mask[3]) {
int flag = 0;
cin >> ip1[0] >> c >> ip1[1] >> c >> ip1[2] >> c >> ip1[3];
cin >> ip2[0] >> c >> ip2[1] >> c >> ip2[2] >> c >> ip2[3];
for (int i = 0; i < 4; i++) {
if (mask[i] > 255 || mask[i] < 0 || ip1[i]>255 || ip1[i] < 0 || ip2[i]>255 || ip2[i] < 0) {
flag = 1;
break;
}
}
string str;
for (int i = 0; i < 4; i++) {
str += func(mask[i]);
}
if (str[0] == '0') {
for (int j = 1; j < 32; j++) {
if (str[j] == '1') {
flag = 1;
break;
}
}
}
else {
for (int i = 1; i < 31; i++) {
if (str[i] == '0'&&str[i + 1] == '1') {
flag = 1;
break;
}
}
}
if (flag == 1) {
cout << flag;
continue;
}
for (int i = 0; i < 4; i++) {
if ((ip1[i] & mask[i]) != (ip2[i] & mask[i])) {
flag = 2;
}
}
cout << flag;
}
}
判断两个ip是否属于同一个子网
最新推荐文章于 2024-05-19 23:47:09 发布