题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
import java.util.Scanner;
import java.util.Stack;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextLine()) { // 注意 while 处理多个 case
System.out.println(solution(in.nextLine()));
}
}
private static String solution(String param) {
if (isIp(param)) {
String[] ipArray = param.split("\\.");
StringBuffer sbf = new StringBuffer();
for (String ip : ipArray) {
sbf.append(ten2two(ip));
}
return two2ten(sbf.toString());
}
String twoStr = ten2two(param);
String[] twoArray = twoStr.split(" ");
StringBuffer sbf = new StringBuffer();
for (String two : twoArray) {
sbf.append(two2ten(two));
sbf.append(".");
}
sbf.deleteCharAt(sbf.length() - 1);
return sbf.toString();
}
private static boolean isIp(String param) {
if (param.indexOf(".") > 0) {
return true;
}
return false;
}
private static String two2ten(String two) {
long res = 0;
int length = two.length();
while (length > 0) {
char num = two.charAt(length-1);
if (num == '1') {
res += Math.pow(2, two.length() - length);
}
length--;
}
return res + "";
}
private static String ten2two(String ten) {
Stack<String> stack = new Stack<>();
long a = Long.parseLong(ten);
while (a > 1) {
stack.add(a % 2 + "");
a = a / 2;
}
stack.add(a + "");
int pos = stack.size() % 8;
if (pos != 0) {
int zeroNum = 8 - pos;
while (zeroNum > 0) {
zeroNum--;
stack.add("0");
}
}
StringBuffer sbf = new StringBuffer();
int stackSize = stack.size();
int count = 1;
while (!stack.isEmpty()) {
sbf.append(stack.pop());
if (count % 8 == 0) {
sbf.append(" ");
}
count++;
}
sbf.deleteCharAt(sbf.length() - 1);
return sbf.toString();
}
}
腾讯成长空间 5958人发布