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

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

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

#include <stdio.h>
#include <string.h>
typedef struct{
    unsigned char a1;
    unsigned char a2;
    unsigned char a3;
    unsigned char a4;
}ipBYTE;
typedef union{
    unsigned int ipNum;
    ipBYTE ipByte;
}IP_TYPE;
int checkIP(int* aIp)
{
    if((aIp[0] >= 0 && aIp[0] <= 255) &&
    (aIp[1] >= 0 && aIp[1] <= 255) &&
    (aIp[2] >= 0 && aIp[2] <= 255) &&
    (aIp[3] >= 0 && aIp[3] <= 255))
        return 1;
    else
        return 0;
}
int checkHideIp(int* aIp)
{
    int flag0 = 0;
    for(int i = 3; i >= 0; i--)
    {
        if(aIp[i] != 0 && 0 == flag0)
        {
            flag0 = 1;
            continue;
        }
        if(aIp[i] != 0 && aIp[i] != 255)
            return 0;
        if(flag0 == 1 && aIp[i] == 0)
            return 0;
    }
    return 1;
}
int main() {
    int a1=0,a2=0,a3=0,a4=0;
    int aIp[4] = {-1};
    int aIp1[4] = {-1};
    int aIp2[4] = {-1};
    IP_TYPE ip,ip1,ip2;
    while(EOF!=scanf("%d.%d.%d.%d",&aIp[0],&aIp[1],&aIp[2],&aIp[3]))
    {
        memset(aIp1, -1, sizeof(int)*4);
        scanf("%d.%d.%d.%d",&aIp1[0],&aIp1[1],&aIp1[2],&aIp1[3]);
        memset(aIp2, -1, sizeof(int)*4);
        scanf("%d.%d.%d.%d",&aIp2[0],&aIp2[1],&aIp2[2],&aIp2[3]);
        if(1 == checkIP(aIp) && 1== checkIP(aIp1) && 1 == checkIP(aIp2) && 1 == checkHideIp(aIp))
        {
            ip.ipByte.a1 = aIp[3];
            ip.ipByte.a2 = aIp[2];
            ip.ipByte.a3 = aIp[1];
            ip.ipByte.a4 = aIp[0];

            ip1.ipByte.a1 = aIp1[3];
            ip1.ipByte.a2 = aIp1[2];
            ip1.ipByte.a3 = aIp1[1];
            ip1.ipByte.a4 = aIp1[0];
            
            ip2.ipByte.a1 = aIp2[3];
            ip2.ipByte.a2 = aIp2[2];
            ip2.ipByte.a3 = aIp2[1];
            ip2.ipByte.a4 = aIp2[0];
            if((ip.ipNum & ip1.ipNum) == (ip.ipNum & ip2.ipNum))
            {
                printf("0\n");
            }else {
                printf("2\n");
            }
        }else
            printf("1\n");
    }

    return 0;
}

全部评论
判断子网掩码是否合法有点麻烦
点赞 回复 分享
发布于 03-11 15:28 广东

相关推荐

球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务