【java华为机试】HJ33 整数与IP地址间的转换
描述
原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成 一个长整数。 举例:一个ip地址为10.0.3.193 每段数字 相对应的二进制数 10 00001010 0 00000000 3 00000011 193 11000001
组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。
数据范围:保证输入的是合法的 IP 序列
输入描述:
输入 1 输入IP地址 2 输入10进制型的IP地址
输出描述:
输出 1 输出转换成10进制的IP地址 2 输出转换后的IP地址
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { String s = sc.nextLine(); // 如果此字符串包含 ".",则返回 true,否则返回 false if (s.contains(".")) { System.out.println(ip2num(s)); } else { System.out.println(num2ip(Long.parseLong(s))); } } } public static long ip2num(String ip) { String[] arrayIp = ip.split("\."); StringBuilder sb = new StringBuilder(); for (int i = 0; i < 4; i++) { // 用十进制参数表示的整数值。 int num = Integer.parseInt(arrayIp[i]); // 拆分 // 用二进制(基数 2)参数表示的无符号整数值的字符串表示形式。 String num2 = Integer.toBinaryString(num); // 转换为二进制 while (num2.length() < 8) { num2 = "0" + num2; // 拼接 } // 将指定的字符串追加到此字符序列。 sb.append(num2); } return Long.parseLong(sb.toString(), 2); // 转化为10进制 } public static String num2ip(long num) { String num2 = Long.toBinaryString(num); // 转换为2进制 while (num2.length() < 32) { num2 = "0" + num2; } String[] ans = new String[4]; for (int i = 0; i < 4; i++) { String s = num2.substring(8 * i, 8 * i + 8); // 拆分 s = Integer.toString(Integer.parseInt(s, 2)); // 转化为10进制 ans[i] = s; } return String.join(".", ans); // 拼接 } }
输入: 10.0.3.193 167969729
输出: 167773121 10.3.3.193
下一篇:
程序员短期如何实现升职加薪?赶快看过来