题解 | #判断两个IP是否属于同一子网#

判断两个IP是否属于同一子网

http://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218

#include #include using namespace std; int main() { string a,b,c; while(cin>>a>>b>>c) {

    int d=0,w=0;
        h:
    if(w==1)
    {
    continue;
        }
       if(a[0]!='2')
            {
                 cout<<'1'<<endl;
                   w=1;
                   goto h;
            }
    string s=a,sss;
    while(s.size())
    {
        int t=0,tt=0;
    for(int i=0;i<s.length();i++)
    {
        if(s[i]=='.')
        {
            tt++;
        for(int j=0;j<i;j++)
        {
            t=t*10+s[j]-'0';
        }
             if(t>255||t<0)
         {
             cout<<'1'<<endl;
             w=1;
             goto h;
         }
            string ss;
            ss.clear();
            if(t==0)
            {
                ss='0';
            }
            while(t)
            {
                ss+=t%2+'0';
                t=t/2;
            }
           reverse(ss.begin(), ss.end());
            sss+=ss;
            s=s.substr(i+1,s.length());
            i=-1;
        }
    }
     if(tt==3)
     {
         int t=0;
        for(int j=0;j<s.length();j++)
        {
            t=t*10+s[j]-'0';
        }
            string ss;
            ss.clear();
         if(t>255||t<0)
         {
             cout<<'1'<<endl;
             w=1;
             goto h;
         }
           if(t==0)
            {
                ss='0';
            }
            while(t)
            {
                ss+=t%2+'0';
                t=t/2;
            }
           reverse(ss.begin(), ss.end());
            sss+=ss;
            s="";
        }  
     }   
    for(int i=0;i<sss.length();i++)
    {
        if(sss[i]=='0'&&sss[i+1]=='1')
        {
        cout<<'1'<<endl;
        w=1;
        goto h;
        }
    }
       int e=0;
    for(int i=0;i<b.length();i++)
    {
        if(b[i]=='.'&&e==0)
        {  
            int g=0;       
              e=1;
            for(int j=0;j<i;j++)
            {
                g=g*10+b[j]-'0';
            }
            if(g>255||g<0)
            {
                cout<<'1';
                  w=1;
                goto h;
            }
        }
        else if(b[i]=='.'&&e==1)
        {
            e++;
            int k,g=0;
            for(int j=i-1;j>0;j--)
            {
                if(b[j]=='.')
                {
                    k=j;
                    break;
                }
            }
            for(int m=k+1;m<i;m++)
            {
                  g=g*10+b[m]-'0';
            }
               if(g>255||g<0)
            {
                cout<<'1'<<endl;
                   w=1;  
                goto h;
            }
        }
        else if(b[i]=='.'&&e==2)
        {
            int k,g=0;
            for(int j=i-1;j>0;j--)
            {
                if(b[j]=='.')
                {
                    k=j;
                    break;
                }
            }
            for(int m=k+1;m<i;m++)
            {
                  g=g*10+b[m]-'0';
            }
               if(g>255||g<0)
            {
                cout<<'1'<<endl;
                   w=1;  
                goto h;
            }
            int n=0;
             for(int j=i+1;j<b.length();j++)
            {
                n=n*10+b[j]-'0';
            }
            if(n>255||n<0)
            {
                cout<<'1'<<endl;
                  w=1;
                goto h;
            } 
        }
    }
    int u=0;
     for(int i=0;i<c.length();i++)
    {
      
      
        if(c[i]=='.'&&u==0)
        {  
            int g=0;       
              u=1;
            for(int j=0;j<i;j++)
            {
                g=g*10+c[j]-'0';
            }
            if(g>255||g<0)
            {
                cout<<'1'<<endl;
                  w=1;
                goto h;
            }
        }
        else if(c[i]=='.'&&u==1)
        {
            u++;
            int k,g=0;
            for(int j=i-1;j>0;j--)
            {
                if(c[j]=='.')
                {
                    k=j;
                    break;
                }
            }
            for(int m=k+1;m<i;m++)
            {
                  g=g*10+c[m]-'0';
            }
               if(g>255||g<0)
            {
                cout<<'1'<<endl;
                    w=1; 
                goto h;
            }
        }
          else if(c[i]=='.'&&u==2)
        {
            int k,g=0;
            for(int j=i-1;j>0;j--)
            {
                if(c[j]=='.')
                {
                    k=j;
                    break;
                }
            }
            for(int m=k+1;m<i;m++)
            {
                  g=g*10+c[m]-'0';
            }
               if(g>255||g<0)
            {
                cout<<'1'<<endl;
                   w=1;  
                goto h;
            }
            int n=0;
             for(int j=i+1;j<c.length();j++)
            {
                n=n*10+c[j]-'0';
            }
            if(n>255||n<0)
            {
                cout<<'1'<<endl;
                  w=1;
                goto h;
            } 
        }
     }
    int l=0;
    for(int i=0;i<a.length();i++)
    {
        if(a[i]=='.')
        {
            l++;
        }
        if(a[i+1]=='0'&&a[i-1]=='5')
        {
            break;
        }
    }
    for(int i=0;i<min(b.length(),c.length());i++)
    {
        if(b[i]=='.'&&l!=1)
        {
            l--;
        }
        else if(b[i]=='.'&&l==1)
        {
            for(int j=0;j<i;j++)
            {
                if(b[j]!=c[j])
                {
                    cout<<'2'<<endl;
                      w=1;
                    goto h;
                }
                else if(b[j]==c[j]&&j==i-1)
                {
                    cout<<'0'<<endl;
                      w=1;
                    goto h;
                }
            }
        }
    }
  
}
return(0);

}

全部评论

相关推荐

2025-12-13 12:38
惠州学院 直播运营
点赞 评论 收藏
分享
迷茫的大四🐶:赶快咏鹅启动
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务