题解 | #整数与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
}
}

