题解 | #整数与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();
            }
            
        }
    }
}

全部评论

相关推荐

秋国🐮🐴:拿到你简历编号然后让你知道世间险恶
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务