1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| #include<iostream> #include<cstdio> #include<cstring> #define maxn 1010 #define maxm 40 using namespace std; char str[maxn][maxm],ip2[maxn],mask2[maxn]; int bt[maxn][4],ip[4],mask[4]; int main() { int n; while(cin>>n) { memset(ip,0,sizeof(ip)); memset(mask,0,sizeof(mask)); memset(str,0,sizeof(str)); memset(ip2,0,sizeof(ip2)); memset(mask2,0,sizeof(mask2)); memset(bt,0,sizeof(bt)); int z=32; for(int i=0;i<n;i++) scanf("%d.%d.%d.%d",&bt[i][0],&bt[i][1],&bt[i][2],&bt[i][3]); for(int i=0;i<n;i++) { for(int j=0;j<4;j++) { int t=128; for(int k=0;k<8;k++) { if(bt[i][j]-t>=0) { str[i][j*8+k]='1'; bt[i][j]-=t; } else str[i][j*8+k]='0'; t/=2; } } } for(int i=0;i<32;i++) { int j=0; for(j=0;j<n;j++) { if(str[0][i]!=str[j][i]) break; } if(j==n) { ip2[i]=str[0][i]; mask2[i]='1'; } else { z=i; break; } } for(int i=z;i<32;i++) { ip2[i]='0'; mask2[i]='0'; } for(int i=0;i<4;i++) { int x=128; for(int j=0;j<8;j++) { if(ip2[i*8+j]=='1') ip[i]+=x; if(mask2[i*8+j]=='1') mask[i]+=x; x/=2; } } cout<<ip[0]<<"."<<ip[1]<<"."<<ip[2]<<"."<<ip[3]<<endl; cout<<mask[0]<<"."<<mask[1]<<"."<<mask[2]<<"."<<mask[3]<<endl; } return 0; }
|