题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
http://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
#include <stdio.h>
#include <string.h>
int change_n(char *str,int *ip,int ty){
int len,i,j,n=0,l=0,b=1,temp=0;
int tex;
len=strlen(str);
for(i=0;i<len+1;i++){
if((i==len)||(str[i]=='.')){
for(j=0;j<l;j++){
temp+=(str[i-1-j]-48)*b;
b*=10;
}
ip[n]=temp;
n++;
l=0;
b=1;
temp=0;
}
else {
l++;
}
}
if(ty){
tex=~(ip[0]*256*256*256+ip[1]*256*256+ip[2]*256+ip[3]);
if((tex&(tex+1))!=0) return 1;
}
if((ip[0]>255)||(ip[1]>255)||(ip[2]>255)||(ip[3]>255)||(ip[0]<0)||(ip[1]<0)||(ip[2]<0)||(ip[3]<0)) return 1;
else return 0;
}
int main(void) {
char str0[20],str1[20],str2[20];
int flag,i,ip[2][4],ip0[4],ip1[4],ip2[4],erro;
while(scanf("%s",str0)!=-1){
erro=0;
erro+=change_n(str0,ip0,1);
scanf("%s",str1);
erro+=change_n(str1,ip1,0);
scanf("%s",str2);
erro+=change_n(str2,ip2,0);
if (erro) {
printf("1\n");
}
else{
flag=1;
for(i=0;i<4;i++){
ip[0][i]=ip0[i]&ip1[i];
ip[1][i]=ip0[i]&ip2[i];
if(ip[0][i]!=ip[1][i]) flag=0;
}
if(flag) printf("0\n");
else printf("2\n");
}
}
}