标签: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 }
标签:end 16px ati 进制 font rgs network ann java
原文地址:https://www.cnblogs.com/fudanxi/p/10328185.html