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

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

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

#include<iostream>
#include<algorithm>
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);
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 11:20
点赞 评论 收藏
分享
嵐jlu:我是山川🐔里🐔🧱的,阿里系简历全过; 你这简历一看就还是半成品啊,没有荣誉经历奖项什么的吗?
投递阿里巴巴集团等公司10个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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