uva1590 ip地址

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的个数要从前先后找,然后在做
* 其次就是有可能子网掩码的位数在循环里面根本就没有被赋值,所以最后的位数是个乱码
原文地址:https://www.cnblogs.com/kele1997/p/7595813.html