zoukankan      html  css  js  c++  java
  • uva1590

    将IP地址分4段处理,先进行排序,找到最大值和最小值的相同最小字节数,通过tables得到对应段的zwym[i],通过zwym[i]&ip[i][0],ip[i][0]是经过排序后该分段最小值,得到minip[i]。最后将子网掩码不是255分段的后续IP段清零。

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    
    using namespace std;
    
    int tables[9] = { 255,254,252,248,240,224,192,128,0 };
    int main()
    {
    	int zwym[4], minip[4], m, ip[4][1024];
    	while (cin >> m) {
    		memset(ip, 0, sizeof(ip));
    		for (int i = 0; i < m; i++) {
    			char t[40];
    			cin >> t;
    			int begin = 0, ipnum = 0;
    			for (int j = 0; j < strlen(t); j++) {
    				if (t[j] == '.') {
    					for (; begin < j; begin++)
    						ip[ipnum][i] = ip[ipnum][i] * 10 + int(t[begin] - '0');
    					begin++;
    					ipnum++;
    				}
    			}
    			for (; begin < strlen(t); begin++)
    				ip[ipnum][i] = ip[ipnum][i] * 10 + int(t[begin] - '0');
    		}
    		for (int i = 0; i < 4; i++) {
    			int dif = 0, p, q;
    			sort(ip[i], ip[i] + m);
    			p = ip[i][0];
    			q = ip[i][m - 1];
    			for (int j = 1; j < 9; j++) {
    				if (p % 2 != q % 2) {
    				//if ((p % 2) != (q % 2)) {
    					dif = j;
    				}
    				p = p / 2;
    				q = q / 2;
    			}
    			zwym[i] = tables[dif];
    			minip[i] = ip[i][0] & zwym[i];
    		}
    		for (int i = 0; i < 4; i++) {
    			if (zwym[i] != 255) {
    				for (i = i + 1; i < 4; i++) {
    					zwym[i] = 0;
    					minip[i] = 0;
    				}
    				break;
    			}
    		}
    		cout << minip[0] << '.' << minip[1] << '.' << minip[2] << '.' << minip[3] << endl;
    		cout << zwym[0] << '.' << zwym[1] << '.' << zwym[2] << '.' << zwym[3] << endl;
    	}	
    	return 0;
    }
    

      

  • 相关阅读:
    与开发团队高效协作的8个小技巧
    9本java程序员必读的书(附下载地址)
    NPOI导出饼图到Excel
    EF6不支持sqlite Code First解决方案
    C#程序访问底层网络
    如何自己开发软件测试工具?
    .Net mvc 根据前台参数动态绑定对象
    在SSM框架里新增一个功能
    2018-10-12 例会总结
    2018-10-11 java从入门到放弃--方法
  • 原文地址:https://www.cnblogs.com/ArvinShaffer/p/9024678.html
Copyright © 2011-2022 走看看