题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) { BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); StringBuilder str = new StringBuilder(); String a, b; try { a = r.readLine(); b = r.readLine(); } catch (IOException e) { throw new RuntimeException(e); } char[] chs1 = a.toCharArray(); char[] chs2 = b.toCharArray(); int i = 0, j = 0, l, num = 0, ans1 = 0; long ans = 0; int[] i1 = new int[4];//存储数组 l = chs1.length; do {//获得ip四位数,并放入数组 if (chs1[i] == '.') { i1[j++] = num; num = 0; i++; } num *= 10; num += chs1[i] - '0'; if (i == l - 1) i1[j] = num; i++; } while (i < l); i = 3; do {//遍历数组 ans = (long) i1[3 - i] << i * 8 | ans;//左移后和之前的值按位或运算 i--; } while (i > -1); str.append(ans).append("\n");//将十进制结果放入String Builder i = 0; l = chs2.length; do {//计算输入的十进制数 ans1 *= 10; ans1 += chs2[i] - '0'; i++; } while (i < l); i = 0; do { str.append((ans1 << 8 * i + 32) >>> 56);//先左移去除高位,后右移获得该8位的值 if (i != 3) str.append("."); i++; } while (i < 4); System.out.print(str);//将结果放入String Builder } }