• 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的个数要从前先后找,然后在做
    * 其次就是有可能子网掩码的位数在循环里面根本就没有被赋值,所以最后的位数是个乱码
  • 相关阅读:
    windows下安装redis以及redis扩展,设置redis为windows自启服务
    Redis和Memcache的区别
    Git 简单入门使用
    ssh 连接 mac osx下 virtual box虚拟机中的 cent os 记录
    把可运行jar转换成Linux服务运行
    CentOS 7 配置FTP(vsftpd)
    团队总结
    第五周小组项目总结
    第四周小组项目总结
    第三周小组项目总结
  • 原文地址:https://www.cnblogs.com/kele1997/p/7595813.html
Copyright © 2020-2023  润新知