ZOJ-2645
来源:互联网 发布:韩侂胄 知乎 编辑:程序博客网 时间:2024/05/16 18:51
本来挺简单一道题。。让我写的复杂无比,关键是中间还掉进了一个大坑!!!一个32位整数,如果移位大于等32位,那行为就是未定义的,而我天真地以为移位超过32位就变为0了,真是too simple。。WA的半死,说多了都是泪。。上代码吧
#include<stdio.h>#include<string.h>unsigned int ip_to_int(char *s){ unsigned int temp, res = 0; char *t; while ((t = strchr(s, '.')) != NULL) { temp = 0; char *i; for (i = s; i < t; i++) temp = temp * 10 + *i - '0'; s = t + 1; res = res * 256 + temp; } temp = 0; for (t = s; *t != '\0'; t++) temp = temp * 10 + *t - '0'; res = res * 256 + temp; return res;}unsigned int index_of(unsigned int num, int index){ return (num >> (31 - index)) & 1u;}void int_to_ip(unsigned int num, char *s){ unsigned four = num % 256; unsigned three = (num / 256) % 256; unsigned two = (num / 256 / 256) % 256; unsigned one = (num / 256 / 256 / 256) % 256; sprintf(s, "%u.%u.%u.%u", one, two, three, four);}int main(){ int m; unsigned int a[1000]; char s[20]; while (scanf("%d", &m) != EOF) { getchar(); int i, j; for (i = 0; i < m; i++) { gets(s); a[i] = ip_to_int(s); } int find = 0; for (i = 0; i < 32; i++) { unsigned int bit = index_of(a[0], i); for (j = 1; j < m; j++) if (index_of(a[j], i) != bit) { find = 1; break; } if (find) break; } unsigned int mask = i ? (~0u >> (32 - i)) << (32 - i) : 0u; //unsigned int mask = (~0u >> (32 - i)) << (32 - i); Wrong!!!!! //mask value, important code!!! int_to_ip(mask & a[0], s); printf("%s\n", s); int_to_ip(mask, s); printf("%s\n", s); } return 0;}
0 0
- ZOJ-2645
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- Android JNI使用方法
- oracle 单实例 ASM 基本框架
- 京东的互联网金融中的网银在线
- 每一事都是从最伟大的第一步开始
- 逆向分析技术总结(转)
- ZOJ-2645
- 微信排序算法
- Hashtable、synchronizedMap、ConcurrentHashMap 比较
- 网络字节转换函数 htons(), htonl(), ntohs(), ntohl()
- java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@41a7f048
- 保持坦然平和的心态!
- 动网7.0sp2 cookie欺骗原理
- error: name lookup of 'first' changed for ISO 'for' scoping [-fpermissive]
- 在Hibernate 4.3中如果使用了@Table注解,在获取session的时候会抛出如下异常解决办法