题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
http://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
#include <string.h>
int main()
{
char str[50]={0};
int flag=0,ip[4],I[4],P[4],i=0,j;
while(scanf("%d%*c",&ip[0])!=EOF)
{
int a[40]={0},b[40]={0},c[40]={0},d[40]={0},e[40]={0};
for(i=0;i<3;i++)
scanf("%d%*c",&ip[i+1]);
for(i=0;i<4;i++)
scanf("%d%*c",&I[i]);
for(i=0;i<4;i++)
scanf("%d%*c",&P[i]);
flag=0;
if((ip[0]==128||ip[0]==192||ip[0]==224||ip[0]==240||ip[0]==248||ip[0]==254||ip[0]==255||ip[0]==252)&&ip[1]==0&&ip[2]==0&&ip[3]==0)
flag=1;
else if((ip[1]==128||ip[1]==192||ip[1]==224||ip[1]==240||ip[1]==248||ip[1]==254||ip[1]==255||ip[1]==252||ip[1]==0)&&ip[2]==0&&ip[3]==0&&ip[0]==255)
flag=1;
else if((ip[2]==128||ip[2]==192||ip[2]==224||ip[2]==240||ip[2]==248||ip[2]==254||ip[2]==255||ip[2]==252||ip[2]==0)&&ip[0]==255&&ip[3]==0&&ip[1]==255)
flag=1;
else if((ip[3]==128||ip[3]==192||ip[3]==224||ip[3]==240||ip[3]==248||ip[3]==254||ip[3]==252||ip[3]==0)&&ip[0]==255&&ip[2]==255&&ip[1]==255)
flag=1;
else
flag=2;
for(i=0;i<4;i++)
{
if(I[i]>255||I[i]<0||P[i]>255||P[i]<0)
flag=2;
}
if(flag==2)
{
printf("1\n");
continue;
}
for(j=0;j<4;j++)
{
for(i=7+8*j;i>=8*j;i--)
{
a[i]=ip[j]%2;
ip[j]/=2;
}
}
for(j=0;j<4;j++)
{
for(i=7+8*j;i>=8*j;i--)
{
b[i]=I[j]%2;
I[j]/=2;
}
}
for(j=0;j<4;j++)
{
for(i=7+8*j;i>=8*j;i--)
{
c[i]=P[j]%2;
P[j]/=2;
}
}
for(i=0;i<32;i++)
{
if(a[i]==1&&b[i]==1)
d[i]=1;
}
for(i=0;i<32;i++)
{
if(a[i]==1&&c[i]==1)
e[i]=1;
}
flag=0;
for(i=0;i<32;i++)
{
if(e[i]!=d[i])
flag=1;
}
if(flag==0)
printf("0\n");
else
printf("2\n");
}
}