小紫书 4-5 UVA 1590 IP Networks

来源:互联网 发布:java酒店需求分析 编辑:程序博客网 时间:2024/05/21 06:47

题解:


代码:

#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>using namespace std;int m, n = 32;bool net[32], add[32];void str_to_add(char str[20], int x){for (int i = 0, j = 0, tmp = 0; j < 20; ++i){if (str[i] >= '0'&&str[i] <= '9')tmp = tmp * 10 + str[i] - '0';else if (str[i] == '.'){for (int k = 0; k < 8; ++k){if (tmp&(1 << k))add[j * 8 + 7 - k] = 1;}tmp = 0; ++j;}else if (str[i] == 0){for (int k = 0; k < 8; ++k){if (tmp&(1 << k))add[j * 8 + 7 - k] = 1;}tmp = 0; break;}}}int main(){//freopen("input.txt", "r", stdin);char str[20];while (scanf("%d", &m) != EOF){n = 32;for (int i = 0; i < m; ++i){memset(add, 0, sizeof(add));memset(str, 0, sizeof(str));scanf("%s", str);str_to_add(str, i);if (i == 0){for (int j = 0; j < 32; ++j)net[j] = add[j];}else{for (int j = 0; j < n; ++j)if (net[j] != add[j]){n = j;for (int k = n; k < 32; ++k)net[k] = 0;break;}}}int net1[4] = { 0 }, mask[4] = { 0 };for (int i = 0; i < 32; ++i)net1[i / 8] = net1[i / 8] * 2 + net[i];for (int t = n, i = 0; t > 0; ++i){if (t >= 8)mask[i] = 255;elsemask[i] = 255 - ((1 << (8 - t)) - 1);t -= 8;}for (int i = 0; i < 4; ++i){printf("%d", net1[i]);if (i == 3)printf("\n");elseprintf(".");}for (int i = 0; i < 4; ++i){printf("%d", mask[i]);if (i == 3)printf("\n");elseprintf(".");}}//system("pause");//while (1);return 0;}

0 0