题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String target = in.next();
String res;
//区分ip-》整数 or 整数-》ip
String[] split = target.split("\\.");
if (split.length == 1) {
res = numberToIp(target);
} else {
res = ipToNumber(target);
}
System.out.println(res);
}
}
public static String numberToIp(String target) {
String s = tenToTwo(target);
if (s.length()<32){
int other = 32 - s.length();
StringBuilder stringBuilder = new StringBuilder();
for (int i1 = 0; i1 < other; i1++) {
stringBuilder.append("0");
}
s=stringBuilder+s;
}
StringBuilder res = new StringBuilder();
for (int i = 0,j=8; j <= 32;i=i+8,j=j+8) {
String two=s.substring(i,j);
String ten = twoToTen(two);
res.append(ten).append(".");
}
return res.substring(0,res.length()-1);
}
public static String ipToNumber(String target) {
StringBuilder res = new StringBuilder();
String[] split = target.split("\\.");
for (String s : split) {
String two = tenToTwo(s);
int length = two.length();
if (length < 8) {
int other = 8 - length;
StringBuilder stringBuilder = new StringBuilder();
for (int i1 = 0; i1 < other; i1++) {
stringBuilder.append("0");
}
two = stringBuilder + two;
}
res.append(two);
}
return twoToTen(res.toString());
}
public static String tenToTwo(String tar) {
return Long.toString(Long.parseLong(tar), 2);
}
public static String twoToTen(String tar) {
return Long.parseLong(tar, 2) + "";
}
}

查看20道真题和解析