题解 | #判断两个IP是否属于同一子网#

判断两个IP是否属于同一子网

http://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218

#include <stdio.h>
#include <string.h>
#define SIZE 15

int ishefa(int *ym,int *ip1,int *ip2)
{
    int flag=1;
    for(int i=0;i<4;i++)
    {
        if(0<=ip1[i] && ip1[i]<=255)
            ;
        else
            flag=0;
        
        if(0<=ip2[i] && ip2[i]<=255)
            ;
        else
            flag=0;
    }
    for(int i=0;i<3;i++)
    {
        if(ym[i]<ym[i+1])
            flag=0;
    }
    if(flag==1)
        return 1;
    else
        return 0;
}

int main(void)
{
    char Yanma[SIZE]={'\0'};
    char IP1[SIZE]={'\0'};
    char IP2[SIZE]={'\0'};
    while(scanf("%s\n",Yanma) !=EOF)
    {
        scanf("%s\n",IP1);
        scanf("%s\n",IP2);
/*
        printf("%s\n",Yanma);
        printf("%s\n",IP1);
        printf("%s\n",IP2);
*/
        int ym[4]={0};
        int ip1[4]={0};
        int ip2[4]={0};
        
        sscanf(Yanma,"%d.%d.%d.%d",ym,ym+1,ym+2,ym+3);
        sscanf(IP1,"%d.%d.%d.%d",ip1,ip1+1,ip1+2,ip1+3);
        sscanf(IP2,"%d.%d.%d.%d",ip2,ip2+1,ip2+2,ip2+3);
//is hefa
        int hefa;
        hefa=ishefa(ym,ip1,ip2);
//jishun
        
        
        int sum1[4];
        int sum2[4];
        int flag=1;
        for(int i=0;i<4;i++)
        {
            sum1[i]=ip1[i]&ym[i];
            sum2[i]=ip2[i]&ym[i];
            if(sum1[i]!=sum2[i])
                flag=0;
        }
        if(hefa==0)
            printf("1\n");
        else
        {
            if(flag==1)
                printf("0\n");
            else
                printf("2\n");
        }
    }
    return 0;
}
全部评论

相关推荐

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