Uva-1590 - IP Networks-AC
2015-02-04 23:59
351 查看
本题按照题意转换2进制容易一些,不要去找十进制的规律了,浪费了好长时间
思路:
将输入所有Ip转为二进制保存,检测所有IP二进制地址,看从哪位开始有不一样的,由此求出n。
最小IP地址为二进制前32-n位与其他IP一致,后n位全为0.
子网掩码是二进制前32-n位为1,后n位全为0.
AC代码:
思路:
将输入所有Ip转为二进制保存,检测所有IP二进制地址,看从哪位开始有不一样的,由此求出n。
最小IP地址为二进制前32-n位与其他IP一致,后n位全为0.
子网掩码是二进制前32-n位为1,后n位全为0.
AC代码:
#include <stdio.h> #include <stdlib.h> void DecToBin(int *p,int a) { int i=0,bin[8]={0}; while(a) { bin[i]=a%2; a/=2; i++; } for (i=0;i<8;i++) *(p+i)=bin[7-i]; } void BinToDec(int bin[]) { int i,j,n,m; for (i=0;i<4;i++) { n=0; m=1; for (j=i*8+7;j>=i*8;j--) { n+=bin[j]*m; m*=2; } if (!i) printf("%d",n); else printf(".%d",n); } putchar('\n'); } int main() { int i,j,m,n,ipbin[1005][32]; int byte[4]; while(scanf("%d",&m)!=EOF) { for (i=0;i<m;i++) for (j=0;j<4;j++)//此循环借助DecToBin函数将十进制IP转为二进制 { scanf("%d",&byte[j]); getchar(); DecToBin(ipbin[i]+8*j,byte[j]); } /*for (i=0;i<32;i++) printf("%d",ipbin[1][i]);*/ for (i=0;i<32;i++) { for (j=1;j<m;j++) if (ipbin[j][i]!=ipbin[0][i]) break; if (j!=m) break; } n=32-i; //printf("%d\n",n); int minbin[32]={0},mask[32]={0}; for (i=0;i<32-n;i++) { minbin[i]=ipbin[0][i]; mask[i]=1; } /*for (i=0;i<32;i++) printf("%d",minbin[i]); printf("\n"); for (i=0;i<32;i++) printf("%d",mask[i]); printf("\n");*/ BinToDec(minbin); BinToDec(mask); } return 0; }
相关文章推荐
- UVA 1590 - IP Networks
- [刷题]算法竞赛入门经典(第2版) 4-5/UVa1590 - IP Networks
- UVA1590-IP Networks
- UVA 1590 IP Networks 位操作解题
- UVA - 1590 IP Networks
- Uva 1590 IP Networks
- 算法竞赛入门经典第四章习题4-5 IP Networks UVA - 1590
- UVALive3520 UVa1590 POJ2799 IP Networks【进制+位运算】
- 小紫书 4-5 UVA 1590 IP Networks
- 4-5 UVA1590 IP网络(IP Networks)
- UVa 1590 - IP Networks
- UVa 1590 IP Networks(IP 网络)
- UVA 1590 IP Networks
- UVa 1590 IP Networks (IP网络)
- UVA 1590 IP Networks(暴力)
- Uva1590——IP networks
- UVA 1590 IP Networks(IP 网络)
- UVa 1590 - IP Networks
- UVa 1590 IP Networks
- UVA 1590 - IP Networks