小紫书 4-5 UVA 1590 IP Networks
2016-02-23 00:48
302 查看
题解:
代码:
代码:
#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; else mask[i] = 255 - ((1 << (8 - t)) - 1); t -= 8; } for (int i = 0; i < 4; ++i) { printf("%d", net1[i]); if (i == 3) printf("\n"); else printf("."); } for (int i = 0; i < 4; ++i) { printf("%d", mask[i]); if (i == 3) printf("\n"); else printf("."); } } //system("pause"); //while (1); return 0; }
相关文章推荐
- SQLite初试
- Log4j扩展使用--日志记录器Logger
- iOS 8 Auto Layout界面自动布局系列3-使用代码添加布局约束
- Log4j扩展使用--日志记录器Logger
- 对于求职的一些个人看法及总结
- Language Codes Reference
- leetcode 205 : Isomorphic Strings
- android 成长日记 5.关于progress控件和Alertdialog和layout学习
- 逆向分析细节总结
- [040130]命运之夜Fate Stay Night【汉化硬盘版】[带全通关CG回想完美&跳过序章初始存档&中文攻略]
- java列出指定后缀名(*.jpg)的图片
- 平衡查找树之B树
- iOS 设置TextView控件内容行间距
- impala+hue
- 下载APP显示 服务器检索信息出错 ”RPC:S-7:AEC-0“等
- Remove Duplicate Letters
- 关于苹果开发的知识总结
- HTML一个form表单中有两个(多个)submit,后台如何区分(纯HTML实现,无需javascript)
- Lua学习Day02
- JVM学习(3)——总结Java内存模型