main.cc 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include <cstdio>
  2. #include <cstdlib>
  3. const int M = 1000;
  4. char buf[16];
  5. int mask[] = {1 << 7, 1 << 6, 1 << 5, 1 << 4, 1 << 3, 1 << 2, 1 << 1, 1};
  6. void itob(int i, bool *b) {
  7. for (int j = 0; j < 8; j++) {
  8. b[j] = i & mask[j];
  9. }
  10. }
  11. int btoi(bool *b) {
  12. int i = 0;
  13. for (int j = 0; j < 8; j++) {
  14. if (b[j]) i += mask[j];
  15. }
  16. return i;
  17. }
  18. bool ip[M][32];
  19. void print_ip(int m) {
  20. for (int i = 0; i < m; i++) {
  21. for (int j = 0; j < 32; j++) {
  22. printf("%d", ip[i][j]);
  23. }
  24. printf("\n");
  25. }
  26. }
  27. int main() {
  28. int m;
  29. scanf("%d\n", &m);
  30. for (int i = 0; i < m; i++) {
  31. scanf("%s\n", buf);
  32. for (int pre = 0, cur = 0, j = 0; j < 4; j++) {
  33. while (buf[cur] != '.' && buf[cur] != 0) cur++;
  34. buf[cur] = 0;
  35. int num = atoi(buf + pre);
  36. itob(num, ip[i] + 8 * j);
  37. cur++;
  38. pre = cur;
  39. }
  40. }
  41. int i;
  42. for (i = 0; i < 32; i++) {
  43. bool flag = ip[0][i];
  44. for (int j = 0; j < m; j++) {
  45. if (ip[j][i] != flag) goto end;
  46. }
  47. }
  48. end:
  49. for (int j = i; j < 32; j++) {
  50. ip[0][j] = false;
  51. }
  52. printf("%d.%d.%d.%d\n", btoi(ip[0]), btoi(ip[0] + 8), btoi(ip[0] + 16), btoi(ip[0] + 24));
  53. for (int j = 0; j < i; j++) {
  54. ip[0][j] = true;
  55. }
  56. printf("%d.%d.%d.%d\n", btoi(ip[0]), btoi(ip[0] + 8), btoi(ip[0] + 16), btoi(ip[0] + 24));
  57. return 0;
  58. }