import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main{ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 获取输入ip字符串和十进制数字 String ip = br.readLine(); long num = Long.parseLong(br.readLine()); // 将ip字符串地址转换为十进制数字 System.out.println(ipToDecimalNumber(ip)); // 将十进制数字转换为ip地址 System.out.println(decimalNumberToIp(num)); } // 将ip地址转换为十进制数字的函数 public static long ipToDecimalNumber(String ip) { // 分割ip地址为字符串数组 String[] parts = ip.split("\\."); // 将每一个元素转为二进制字符串后拼接 StringBuffer buffer = new StringBuffer(); for (int i = 0; i < parts.length; i++) { int num = Integer.parseInt(parts[i]); // 获取当前ip段数字 String binaryIp = Integer.toBinaryString(num); // 将其转换为二进制字符串 while (binaryIp.length() < 8) { // 将字符串从前面补足至8位 binaryIp = "0" + binaryIp; } buffer.append(binaryIp); // 拼接 } // 遍历结束 // 将2进制字符串转换为十进制后返回 return Long.parseLong(buffer.toString(), 2); } // 将十进制数字转换为ip地址的函数 public static String decimalNumberToIp(long num) { // 将数字转换为二进制字符串 String binaryIp = Long.toBinaryString(num); // 将字符串从前面补足至32位 while (binaryIp.length() < 32) { binaryIp = "0" + binaryIp; } // 将字符串每8位切割后转换为数字,再进行拼接 String[] ans = new String[4]; int index = 0; for (int i = 8; i <= binaryIp.length(); i += 8) { String partBinaryIp = binaryIp.substring(i - 8, i); // 每8位截取子串 int partNum = Integer.parseInt(partBinaryIp,2); // 将二进制子串转换为十进制数字 // 将十进制数字转换为字符串后存入数组 ans[index++] = Integer.toString(partNum); } // 拼接数组中的结果后输出 return String.join(".",ans); } }