题解 | #整数与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.hasNextLine()){
String s1 = in.nextLine();
String s2 = in.nextLine();
String[] ss = s1.split("\\.");
StringBuilder sb = new StringBuilder("");
for(int i=0 ; i<ss.length ; ++i){
sb.append(toBinary(Long.valueOf(ss[i]),8));
}
System.out.println(Long.parseLong(sb.toString(), 2));
//先转化为32位二进制
String ipAddress = toBinary(Long.valueOf(s2), 32);
sb = new StringBuilder("");
StringBuilder sb2 = new StringBuilder("");
for(int i=0 ; i<32 ; ++i){
char c = ipAddress.charAt(i);
if(i!=0 && i%8==0){
long x = Long.parseLong(sb.toString(),2);
sb2.append(String.valueOf(x)+".");
//System.out.println(sb.toString());
sb = new StringBuilder(c+"");
}
else{
sb.append(c);
}
}
//System.out.println(sb.toString());
sb2.append(Long.parseLong(sb.toString(), 2));
System.out.println(sb2.toString());
}
}
public static String toBinary(long num, int len){
StringBuilder sb = new StringBuilder("");
while(num!=0){
if(num%2 == 1){
sb.append("1");
}
else{
sb.append("0");
}
num = num>>1;
}
while(sb.length()<len){
sb.append("0");
}
return sb.reverse().toString();
}
}
查看23道真题和解析