码迷,mamicode.com
首页 > 编程语言 > 详细

UVA 1590 IP Networks JAVA

时间:2019-01-28 00:56:30      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:end   16px   ati   进制   font   rgs   network   ann   java   

题意:输入m代表接下来的数据个数,计算接下来输入数据的网络掩码,和最小网络地址。

思路:
①子网掩码:先将数据转为二进制,判断从哪一位开始有数据不一样,记下下标index,

则子网掩码是index的前面是1,后面是0(2#),就是子网掩码,再转为10#输出;
②最小网络地址:用任意一个IP与子网掩码进行按位与运算得出最小IP,与运算的符号为&。

 1 import java.util.Scanner;
 2 
 3 public class UVA1590 {
 4 
 5     public static void main(String[] args) {
 6             Scanner scanner=new Scanner(System.in);
 7             int m;
 8             while(scanner.hasNext())
 9             {
10                 m=scanner.nextInt();
11                 String[][] strTwo=new String[1000][4];//输入的数据存为二进制
12                 StringBuffer[] stringBuffer=new StringBuffer[4];
13                 int[] resCover=new int[4];//掩码结果 10#
14                 int[] resMin=new int[4];//最小网络地址结果 10#
15                 int [][] numTen = new int[1000][4];//输入的数据存为10进制
16                 for(int i=0;i<m;i++)
17                 {
18                     String string=scanner.next();
19                     String [] strTen=string.split("\\.");//"."有特殊含义,要加\\
20                     int [] numTwo=new int[4];
21                     for(int j=0;j<strTen.length;j++)
22                     {
23                         //ε=(′ο`*)))唉,不知道为什么我这么麻烦
24                         numTen[i][j]=Integer.parseInt(strTen[j].toString());//string->int  10#
25                         strTwo[i][j]=Integer.toBinaryString(numTen[i][j]);//10#->2#
26                         numTwo[j]=Integer.parseInt(strTwo[i][j]);//string->int 2#
27                         strTwo[i][j]=String.format("%08d", numTwo[j]);//2# 标准化,如果有1000->00001000
28                     }
29                 }
30                 int index=32;//最左一个不同出现的地方的下标,他前面全是1,后面全是0(子网掩码)
31                 boolean flag=true;
32                 for(int j=0;j<4&&flag;j++)
33                 {
34         
35                     for(int k=0;k<8&&flag;k++)
36                     {
37                         char ch=strTwo[0][j].charAt(k);
38                         for(int l=0;l<m;l++)
39                         {
40                             if(strTwo[l][j].charAt(k)!=ch)
41                             {
42                                 index=(j)*8+k;
43                                 flag=false;
44                                 break;
45                             }
46                         }
47                     }
48                 }
49                 StringBuffer Cover=new StringBuffer();
50                 StringBuffer[] strCover=new StringBuffer[4];
51                 strCover[0]=new StringBuffer();
52                 strCover[1]=new StringBuffer();
53                 strCover[2]=new StringBuffer();
54                 strCover[3]=new StringBuffer();
55                 for(int j=0,n=0;j<32;j++)
56                 {
57                     if(j<index)
58                         strCover[j/8].append(‘1‘);
59                     else
60                         strCover[j/8].append(‘0‘);
61                 }
62                 for(int j=0;j<4;j++)
63                     {
64                         resCover[j]=Integer.parseInt(strCover[j].toString(), 2);
65                     }
66 
67                 int indexmin=0;//与掩码相与的下标
68 
69                 for(int j=0;j<4;j++)
70                 {
71                     int res=resCover[j]&numTen[indexmin][j];//任意一个子网与掩码相与,则为最小网络地址
72                     resMin[j]=res;
73                 }
74                 
75                 for(int j=0;j<4;j++)
76                 {
77                     if(j!=0)
78                         System.out.print(".");
79                     System.out.print(resMin[j]);
80                 }
81                 System.out.print("\n");
82                 for(int j=0;j<4;j++)
83                 {
84                     if(j!=0)
85                         System.out.print(".");
86                     System.out.print(resCover[j]);
87                 }
88                 System.out.print("\n");
89             }
90     }
91 }

 

UVA 1590 IP Networks JAVA

标签:end   16px   ati   进制   font   rgs   network   ann   java   

原文地址:https://www.cnblogs.com/fudanxi/p/10328185.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!