题解 | #判断两个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");
          
} 
}
全部评论

相关推荐

神哥了不得:放平心态,再找找看吧,主要现在计算机也变卷了,然后就比较看学历了,之前高中毕业你技术强,都能找到工作的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务