题解 | #整数与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);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
String dataStr1 = in.nextLine();
String [] dataArray1 = dataStr1.split("\\.");
System.out.println(encode(dataArray1));
String datStr2 = in.nextLine();
System.out.println( decode(Long.parseLong(datStr2)));
}
}
public static Long encode(String [] dataArray) {
StringBuilder sb = new StringBuilder();
for (String data : dataArray) {
// 十进制转二进制
String n = Long.toString(Long.parseLong(data), 2);
// 判断数量是否小于8.小则补全
while (n.length() < 8) {
n = "0" + n;
}
sb.append(n);
}
// 二进制转十进制
return Long.parseLong(sb.toString(), 2);
}
public static String decode(Long data) {
// 转化为二进制
;
String dataStr=Long.toString(data,2);
// 如果不满则进行补齐
while (dataStr.length()<32) {
dataStr= "0"+dataStr;
}
// 每隔8为进行一次切分
StringBuilder sb =new StringBuilder();
while (dataStr.length()>=8) {
// 截取的第一个数字转化为十进制
long newNum =Long.parseLong(dataStr.substring(0,8),2);
sb.append(newNum).append(".");
dataStr = dataStr.substring(8);
}
return sb.substring(0,sb.length()-1).toString();
}
}
通过Long.parseLong和Long.toString方法可以分别实现十进制转2进制和2进制转十进制。
九号公司成长空间 1人发布
查看6道真题和解析
