题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
import java.util.*; /* 看大家都是用了公式来计算二进制,我是用了死办法,按位计算按位相除,但在一个地方有个坑,大家一定要把int设置为long,要不然会越界,导致部分样例通过不了 */ // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case String s=in.nextLine(); if(s.contains(".")){ String[] str=s.split("\\."); StringBuilder res=new StringBuilder(); long sum=0; for(int i=0;i<str.length;i++){ StringBuilder temp=new StringBuilder(); Stack<Integer> stack=new Stack<>(); int n=Integer.parseInt(str[i]); while(n>0){ int a=n%2; n=n/2; stack.push(a); } while(stack.size()!=8){ stack.push(0); } while(!stack.isEmpty()){ temp.append(stack.peek()); stack.pop(); } res.append(temp); } String newS=res.toString(); for(int i=newS.length()-1;i>=0;i--){ if(newS.charAt(i)=='1'){ int index=newS.length()-1-i; sum+=Math.pow(2,index); } } System.out.println(sum); }else{ String s1=""; long count=Long.parseLong(s); while(count>0){ long a=count%2; count=count/2; s1=String.valueOf(a)+s1; } while(s1.length()!=32){ s1="0"+s1; } int start=0; int end=8; int[] arr=new int[4]; int k=0; while(end<=s1.length()){ String sub=s1.substring(start,end); int sum=0; for(int i=sub.length()-1;i>=0;i--){ if(sub.charAt(i)=='1'){ int index=sub.length()-1-i; sum+=Math.pow(2,index); } } arr[k++]=sum; start=end; end+=8; } for(int i=0;i<arr.length;i++){ System.out.print(arr[i]); if(i!=arr.length-1){ System.out.print("."); } } System.out.println(); } } } }