题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
使用二进制移位进行解题:
问题:
期间遇到分割符时应该用"//." 不能用"."
后面是因为整型无法支持32位数值,改成long
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNext()) { // 注意 while 处理多个 case // String ipString = in.next(); String decimalStr = in.next(); String[] ipStrArr = ipString.split("\\."); long decimalnum = 0; int N = ipStrArr.length; int index = N-1; for(int i = 0;i<N;i++){ long val = Long.valueOf(ipStrArr[i]); decimalnum = decimalnum + (val << (8*index)); index--; } System.out.println(decimalnum); long ipIntValue = Long.valueOf(decimalStr); String ipStr = ""; for(int i = 3; i>=0 ;i--){ long v1 = ipIntValue / (1 << (8*i)); ipIntValue = ipIntValue % (1 << (8*i)); ipStr = ipStr +"." + v1 ; } System.out.println(ipStr.substring(1)); } } }