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地址 示例1 输入: 10.0.3.193 167969729 复制输出: 167773121 10.3.3.193 复制
package org.example.medium; import java.util.Scanner; import java.util.Stack; public class Hj33 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String s = scanner.nextLine(); String s1 = scanner.nextLine(); Long sDeIp = deIp(s); String sEnIp = enIp(s1); System.out.println(sDeIp); System.out.println(sEnIp); } } private static Long deIp(String str) { boolean flag = false; int count = 0; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (c == .) { count++; } } int len = count + 1; StringBuilder sb = new StringBuilder(); int[] strs = new int[len]; int j = 0; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (c == .) { strs[j] = Integer.parseInt(sb.toString()); j++; sb = new StringBuilder(); } else { sb.append(c); if (i == str.length() - 1) { strs[j] = Integer.parseInt(sb.toString()); } } } sb = new StringBuilder(); for (int i = 0; i < strs.length; i++) { String s1 = Long.toBinaryString(strs[i]); String s; if (i != 0) { s = turnZero(s1); } else { s = s1; } sb.append(s); } Long i = Long.parseLong(sb.toString(), 2); return i; } public static String turnZero(String str) { StringBuilder sb = new StringBuilder(""); if ("0".equals(str)) { return "00000000"; } else { int len = 8 - str.length(); while (len > 0) { sb.append("0"); len--; } } sb.append(str); return sb.toString(); } public static String enIp(String s) { String str = Long.toBinaryString(Long.parseLong(s)); int count = 0; Stack<String> strStack = new Stack<>(); StringBuilder sb = new StringBuilder(); for (int i = str.length() - 1; i >= 0; i--) { char c = str.charAt(i); if (count == 8) { sb.reverse(); strStack.push(turnString(sb.toString())); sb = new StringBuilder(); sb.append(c); count = 1; } else { sb.append(c); count++; if (i == 0) { strStack.push(turnString(sb.reverse().toString())); } } } sb = new StringBuilder(); while (!strStack.isEmpty()){ String pop = strStack.pop(); sb.append(pop); sb.append("."); } sb.deleteCharAt(sb.length()-1); return sb.toString(); } public static String turnString(String str) { long l = Long.parseLong(str, 2); return String.valueOf(l); } }
上一篇:
IDEA上Java项目控制台中文乱码