题意:输入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;iint 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->0000100028 }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