题解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(); } }
好麻烦