uva1590 ip地址
```
#include <iostream>
#include <cstring>
using namespace std;
void erjin(int a,int p1,int p2,int ip[10005][32],int t)
{
int temp[8];
for(int i=7; i>=0; i--)
{
temp[7-i]=(a>>i)&1;
}
int j=0;
for(int i=p1; i<p2; i++)
{
ip[t][i]=temp[j++];
}
}
void print(int a[])
{
int ans=0;
for(int i=0; i<32; i++)
{
ans=ans*2+a[i];
if(i==7||i==15||i==23||i==31)
{
if(i==7)
cout<<ans;
else
cout<<'.'<<ans;
ans=0;
}
}
cout<<endl;
}
int main()
{
int n;
int ip[1005][32];
while(cin>>n)
{
memset(ip,0,sizeof(ip));
int a,b,c,d;
char e;
for(int i=0; i<n; i++)
{
cin>>a>>e>>b>>e>>c>>e>>d;
erjin(a,0,8,ip,i);
erjin(b,8,16,ip,i);
erjin(c,16,24,ip,i);
erjin(d,24,36,ip,i);
}
// for(int i=0;i<32;i++)
// {
// cout<<ip[0][i]<<' ';
// }
// cout<<endl;
// if(n==1)
// {
// cout<<a<<'.'<<b<<'.'<<c<<'.'<<d<<endl;
// cout<<"255.255.255.255"<<endl;
// continue;
// }
int w=32;
for(int i=0; i<32; i++)
{
int flag=1;
for(int j=1; j<n; j++ )
{
if(ip[j][i]!=ip[j-1][i])
{
flag=0;
break;
}
}
if(!flag)
{
w=i;
break;
}
}
// cout<<"w= "<<w<<endl;
//转换的时候到了......
int ipz[32],dns[32];
int i;
for(i=0; i<w; i++)
{
ipz[i]=ip[0][i];
dns[i]=1;
}
for(; i<32; i++)
{
ipz[i]=0;
dns[i]=0;
}
// cout<<"ipz------------------------------------------"<<endl;
// for(int i=0;i<32;i++)
// cout<<ipz[i]<<" ";
// cout<<endl;
// cout<<"dns-------------------------------------"<<endl;
// for(int i=0;i<32;i++)
// cout<<dns[i]<<" ";
// cout<<endl;
print(ipz);
print(dns);
}
}
- 做了一个中午,用了一小时来找BUG................
- 首先寻找子网掩码0的个数要从前先后找,然后在做
- 其次就是有可能子网掩码的位数在循环里面根本就没有被赋值,所以最后的位数是个乱码