题解 | #整数与IP地址间的转换#相当于256进制的数与10进制的数相互转换

整数与IP地址间的转换

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

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String ip = in.nextLine();
            long longInt = Long.parseLong(in.nextLine());
            System.out.println(ipToLongInt(ip));
            System.out.println(longIntToip(longInt));
        }
    }
    //根据ip地址展开成二进制的特点,四个部分的权重分别为2^24,2^16,2^8,2^0
    public static long ipToLongInt(String ip){
        String[] ipi = ip.split("\\.");
        long res = 0;
        for(int i=ipi.length-1;i>=0;i--){
            res += Long.parseLong(ipi[i]) * Math.pow(2,8*(ipi.length-1-i));
        }
        return res;
    }
    //对2^8取余的低位,取整去掉低位
    public static String longIntToip(long longInt){
        StringBuilder sb = new StringBuilder();
        long ipi = 0;
        while(longInt>0){
            ipi = longInt % (long)Math.pow(2,8);//ip的低位
            longInt = longInt / (long)Math.pow(2,8);//去掉低八位
            if(sb.length()==0){//添加最低位
                sb.append(ipi);
            }else{
                sb.insert(0,".").insert(0,ipi);
            }
        }
        return sb.toString();
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务