【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
下一篇:
程序员短期如何实现升职加薪?赶快看过来
