题解 | #判断两个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");
	    }
	}
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务