您的位置:首页 > 其它

1590 - IP Networks

2015-10-24 20:17 447 查看
巩固了下“局部变量传参给函数并要在函数中修改其值并返回调用处使用修改的值 需传指针”

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<cctype>
#include<vector>
#include<queue>
#include<map>
#include<set>
#define eps 10e-6

using namespace std;

typedef long long ll;

int ip[1005][35];

void solve(int t,int *sum,int id)
{
int tmp[10],p = 0,w = t;
while(t>0)
{
tmp[p++] = t%2;
t/=2;
}
while(p<8) tmp[p++] = 0;
for(int i=7;i>=0;i--)
ip[id][(*sum)++] = tmp[i];
}

int cal(int st,int len)
{
int ret = 0;
for(int i=st;i<st+8;i++)
{
if(i<len) ret = ret*2+ip[0][i];
else ret = ret*2;
}
return ret;
}
int calb(int st,int len)
{
int ret = 0;
for(int i=st;i<st+8;i++)
{
if(i<len) ret = ret*2+1;
else ret = ret*2;
}
return ret;
}

int main()
{
int n;
while(~scanf("%d",&n))
{
int x[4];
for(int i=0;i<n;i++)
{
scanf("%d.%d.%d.%d",&x[0],&x[1],&x[2],&x[3]);
int cnt = 0;
for(int j=0;j<4;j++)
solve(x[j],&cnt,i);
}
int len = 32;
for(int i=1;i<n;i++)
{
int s = 0;
for(int j=0;j<32;j++)
{
if(ip[i][j]==ip[0][j])
s++;
else break;
}
len = min(len,s);
}
for(int i=0;i<24;i+=8)
printf("%d.",cal(i,len));
printf("%d\n",cal(24,len));
for(int i=0;i<24;i+=8)
printf("%d.",calb(i,len));
printf("%d\n",calb(24,len));
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: