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

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

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static int g_ip[3][4]; /* 3 按顺序表示掩码,两个子设备 */
int main(int argc, char** argv)
{
    // freopen("input.txt", "r", stdin);
    int i, j;
    while (scanf("%d.%d.%d.%d", &g_ip[0][0], &g_ip[0][1], &g_ip[0][2], &g_ip[0][3]) != EOF) {
        scanf("%d.%d.%d.%d", &g_ip[1][0], &g_ip[1][1], &g_ip[1][2], &g_ip[1][3]);
        scanf("%d.%d.%d.%d", &g_ip[2][0], &g_ip[2][1], &g_ip[2][2], &g_ip[2][3]);

        for (i = 0; i < 3; i++) { /* 保证数值均在 0-255 */
            for (j = 0; j < 4; j++) if ((g_ip[i][j] < 0) || (g_ip[i][j] > 255)) break;
            if (j < 4) break;
        }
        if (i < 3) { printf("1\n"); continue; }

        for (i = 0; i < 4; i++) { /* 保证掩码是左 1 右 0 的标准格式 */
            if (g_ip[0][i] == 255) continue;
            for (j = i + 1; j < 4; j++) if (g_ip[0][j] != 0) break;
            if (j < 4) break;
            if ((g_ip[0][i] != 254) && (g_ip[0][i] != 252) && (g_ip[0][i] != 248) && (g_ip[0][i] != 240) &&
                (g_ip[0][i] != 224) && (g_ip[0][i] != 192) && (g_ip[0][i] != 128) && (g_ip[0][i] != 0)) break;
        }
        if (i < 4) { printf("1\n"); continue; }

        for (i = 0; i < 4; i++) { /* 匹配是否同一网络 */
            if ((g_ip[1][i] & g_ip[0][i]) != (g_ip[2][i] & g_ip[0][i])) break;
        }
        if (i < 4) printf("2\n"); else printf("0\n");
    }
    // fclose(stdin);

    return 0;
}
全部评论

相关推荐

AI牛可乐:哇,听起来你遇到了什么挑战呢!🐮牛可乐在这里,虽然小,但是勇敢又聪明,想听听你的具体情况哦!如果你愿意的话,可以点击我的头像给我私信,我们可以一起想办法应对挑战,好不好呀?🌟🎉
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务