题解 | #整数与IP地址间的转换#

整数与IP地址间的转换

https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea

ip转数字
  • 读入,Scanner,nextLine对String的ip
  • 二进制,将每一段转为对应的二进制binaryString
    • 转换过程中出现01,0,会忽略0,10正常,因为转换的是无符号整数
      需要补齐8位,insert指定位置插入 
  • 长整数,valueOf(String,radix)将当前radix表示的String类型数字转为Long类型
数字转ip
  • 读入,nextLong(),长整数表示的ip 
  • 二进制,32位补齐
  • ip, 将每一段转为int整数,拼接加入"."符号
    Integer.parseInt(duan, 2);
radix表示的String转为int类型

import java.util.*;
    
public class Main{
 public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String ss = scanner.nextLine();
        ipParse(ss);
        long l = scanner.nextLong();
        //数字转IP
        parseIp(l);
    }
    private static void ipParse(String ip){
        //.需要转义
        String[] split = ip.split("\\.");
        //ip -long,
        StringBuilder builder = new StringBuilder();

        for (String snum : split) {
            int i = Integer.valueOf(snum);
 
            String s = Integer.toBinaryString(i);
            int need = 8-s.length();
            if (need>0){
                //需要补0
                StringBuilder eight = new StringBuilder(s);
                for (int j =0; j<need;j ++){
                    eight.insert(0,"0");
                }
                s = eight.toString();
            }
            builder.append(s);//二进制
        }
        
        System.out.println(Long.valueOf(builder.toString(),2));
    }
    private static void parseIp(Long ip){
        //二进制
        String ips = Long.toBinaryString(ip);
        int need = 32-ips.length();
        if (need>0){
            //需要补0
            StringBuilder tt = new StringBuilder(ips);
            for (int j =0; j<need;j ++){
                tt.insert(0,"0");
            }
            ips = tt.toString();
        }
        //每八位一段
        int end = 8;
        StringBuilder builder = new StringBuilder();
        while (end <=ips.length()){
            String duan = ips.substring(end - 8, end);
            int i = Integer.parseInt(duan, 2);
            builder.append(i);
            if (end <ips.length()){
                builder.append(".");
            }
            end += 8;
        }
        System.out.println(builder.toString());
    }
}


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务