#include <iostream> using namespace std; int res1[6], res2[6]; int sd[6]; bool check1(int p[]) { for (int i = 1; i <= 4; i++) { if (p[i] < 0) { return false; } } for (int i = 2; i <= 4; i++) { if (p[i] > p[i - 1]) { return false; } } return true; } bool check(int p[]) { for (int i = 1; i <= 4; i++) { if (p[i] > 255||p[i]<0) { return false; } } return true; } int main() { string a, b, c; while (cin >> a >> b >> c) { int len = a.size(), len2 = b.size(), len3 = c.size(); int res = 0; int j = 1; int f = 0; for (int i = 0; i < len; i++) { if (a[i] == '-') { f = 1; i++; // continue; } while (a[i] != '.' && i < len) { res = res * 10 + (a[i] - '0'); i++; } if(f==1){ res*=-1; f = 0; } sd[j++] = res; res = 0; } j = 1; res = 0,f = 0; for (int i = 0; i < len2; i++) { if (b[i] == '-') { f = 1; i++; // continue; } while (b[i] != '.' && i < len2) { res = res * 10 + (b[i] - '0'); i++; } if(f==1){ res*=-1; f = 0; } res1[j++] = res; res = 0; } j = 1; res = 0; for (int i = 0; i < len3; i++) { if (c[i] == '-') { f = 1; i++; // continue; } while (c[i] != '.' && i < len3) { res = res * 10 + (c[i] - '0'); i++; } if(f==1){ res*=-1; f = 0; } res2[j++] = res; res = 0; } // for (int i = 1; i <= 4; i++) { // cout << res1[i] << ' ' << res2[i] << ' ' << sd[i] << '\n'; // } bool ok1 = check(res1); bool ok2 = check(res2); bool ok3 = check1(sd); if (ok1 == ok2 && ok1 == true && ok1 == ok3) { bool flag = true; for (int i = 1; i <= 4; i++) { int x = res1[i] & sd[i]; int y = res2[i] & sd[i]; if (x != y) { flag = false; break; } } if (!flag) { cout << "2\n"; } else { cout << "0\n"; } } else { cout << "1\n"; } // cout<<a[1]&sd[1]<<'\n'; } return 0; } // 64 位输出请用 printf("%lld")
存储每个地址的十进制数字,注意有负数,然后分别进行&运算,模拟判断即可。