题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
#include <stdio.h> int main() { int dns[4]={0}, ip1[4]={0}, ip2[4]={0}; scanf("%d.%d.%d.%d\n",&dns[0],&dns[1],&dns[2],&dns[3]); scanf("%d.%d.%d.%d\n",&ip1[0],&ip1[1],&ip1[2],&ip1[3]); scanf("%d.%d.%d.%d\n",&ip2[0],&ip2[1],&ip2[2],&ip2[3]); /* 格式判斷 */ int i, flag=0; for (i=0; i<4; i++) { if (dns[i]>255 || dns[i]<0 || ip1[i]>255 || ip1[i]<0 || ip2[i]>255 || ip2[i]<0) { flag=1; printf("%d\n",flag); return 0; } } for (i=0; i<4; i++) { // printf("dns[%d]=%d\n",i,dns[i]); if (dns[i]!=255 && dns[i]!=0xfe && dns[i]!=0xfc && dns[i]!=0xf8 && dns[i]!=0xf0 && dns[i]!=0xe0 && dns[i]!=0xc0 && dns[i]!=0x80 && dns[i]!=0) { flag=1; printf("%d\n",flag); return 0; } else { if ((i==0&&dns[i]==0)||(i==3&&dns[i]==255)) { flag =1; printf("%d\n",flag); return 0; } else { if (i>0&&dns[i-1]<255 &&dns[i]!=0) { flag=1; printf("%d\n",flag); return 0; } } } } /* 同子網判斷 */ for (i=0; i<4; i++) { if ((dns[i]&ip1[i])!=(dns[i]&ip2[i])) { flag=2; printf("%d\n",flag); return 0; } } printf("%d\n", flag); return 0; }