题解HJ33 | #整数与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);
String input1 = in.nextLine();
String input2 = in.nextLine();
String[] strings = input1.split("\\.");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < strings.length; i++) {
sb.append(tenToTwo(strings[i], 8));
}
//注意这里是Long
System.out.println(Long.valueOf(sb.toString(), 2).toString());
System.out.println(twoToTen(input2));
}
//二进制转十进制
private static String twoToTen(String str) {
// 11100110 10010110 11010000 10011111
// 00001010 00000011 00000011 11000001
String totalStr = tenToTwo(str, 32);
String[] strs = new String[4];
for (int i = 0; i < 4; i++) {
strs[i] = totalStr.substring(i * 8, i * 8 + 8);
// String singleNum = twoToTen(strs[i]);
String temp = strs[i];
long num = Long.parseLong(temp, 2);
strs[i] = String.valueOf(num);
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {
sb.append(strs[i]);
if (i != 3) sb.append('.');
}
return sb.toString();
}
//十进制转二进制
private static String tenToTwo(String str, int length) {
long num = Long.parseLong(str, 10);
StringBuilder sb = new StringBuilder();
long temp = 0;
while (num != 0) {
temp = num % 2;
num /= 2;
if (temp == 0) {
sb.append((char) ('0' + 0));
} else {
sb.append((char) ('0' + 1));
}
}
int len = sb.length();
if (len < length) {
for (int i = 0; i < length - len; i++) {
sb.append('0');
}
}
return sb.reverse().toString();
}
}
好麻烦

