uva1590ip地址,你感受到绝望吗

Posted by 可乐 on May 10, 2017

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的个数要从前先后找,然后在做
  • 其次就是有可能子网掩码的位数在循环里面根本就没有被赋值,所以最后的位数是个乱码