题解 | #判断两个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;
}
查看13道真题和解析