您的位置:首页 > 其它

UVa 1590 IP Networks

2016-04-16 20:18 393 查看
所有数转化为二进制放到数组里再一位一位比较,第一位出现不同位数后都为0

#include <iostream>
#include <cstring>
#include <stack>
#include <algorithm>
#include <cstdio>
using namespace std;
#define maxn 1005
int k;
void ToB(int n,char *A)
{
stack<int> S;
int cnt=0;
while(n)
{
S.push(n%2);
n/=2;
cnt++;
}
while(cnt++<8) S.push(0);
int p=0;
while(!S.empty()) A[p++]=S.top()+'0',S.pop();
A[p++]='\0';
}
int ToT(char *A,int j)
{
int n=0;
for(int i=j;i<j+8;i++)
n=(n*2+(A[i]-'0'));
return n;
}
int GetN(char A[][100])
{
for(int i=0;i<strlen(A[0]);i++)
{
char ch=A[0][i];
for(int j=1;j<k;j++)
{

if(A[j][i]!=ch) return i;
}
}
return 33;
}
int main()
{
while(scanf("%d",&k)!=EOF)
{
char ip[maxn][100]={0};
char ipm[32];
for(int i=0;i<32;i++) ipm[i]='1';
for(int i=0;i<k;i++)
{
for(int j=0;j<4;j++)
{
int a;
scanf("%d%*c",&a);
ToB(a,ip[i]+strlen(ip[i]));
}
}
int n=GetN(ip);
for(int i=n;i<32;i++)
ip[0][i]=ipm[i]='0';
for(int i=0;i<4;i++)
{
if(i) putchar('.');
printf("%d",ToT(ip[0],i*8));
}
putchar('\n');
for(int i=0;i<4;i++)
{
if(i) putchar('.');
printf("%d",ToT(ipm,i*8));
}
putchar('\n');
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: