题解 | #整数与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 str = in.next();
//如果str中包含.
if (str.contains(".")) {
c1(str);
} else {
c2(str);
}
}
}
private static void c1(String str) {
//使用,分割字符串
String[] strArr = str.split("\\.");
//将字符串中的数字转换为整数
long[] longArr = new long[strArr.length];
for (int i = 0; i < strArr.length; i++) {
longArr[i] = Integer.parseInt(strArr[i]);
}
//依次将数组中的元素转为8位的2进制,并放入StringBuilder中
StringBuilder sb = new StringBuilder();
for (int i = 0; i < longArr.length; i++) {
String binaryStr = Long.toBinaryString(longArr[i]);
//不足8位的在前面补0
while (binaryStr.length() < 8) {
binaryStr = "0" + binaryStr;
}
sb.append(binaryStr);
}
//将最后得到的sb转为10进制
long result = Long.parseLong(sb.toString(), 2);
System.out.println(result);
}
private static void c2(String str) {
//将字符串转为整数
long num = Long.parseLong(str);
//将整数转为2进制(32位)
String binaryStr = Long.toBinaryString(num);
//不足32位的在前面补0
while (binaryStr.length() < 32) {
binaryStr = "0" + binaryStr;
}
//将32位的二进制字符串分为4组,每组8位
String[] strArr = new String[4];
for (int i = 0; i < 4; i++) {
strArr[i] = binaryStr.substring(i * 8, (i + 1) * 8);
}
//将每组的二进制字符串转为整数
Long[] intArr = new Long[4];
for (int i = 0; i < 4; i++) {
intArr[i] = Long.parseLong(strArr[i], 2);
}
//将整数转为字符串,并用.连接
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {
sb.append(intArr[i]);
if (i != 3) {
sb.append(".");
}
}
System.out.println(sb.toString());
}
}
安克创新 Anker公司福利 755人发布
