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

整数与IP地址间的转换

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

各部分直接乘以相应的数量级,感觉完全不需要二进制过渡啊。。根据ip地址展开成二进制的特点,四个部分的权重分别为2^24,2^16,2^8,2^0

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String ip = sc.nextLine();
            long ipDeci = Long.parseLong(sc.nextLine());
            System.out.println(transferToIpDecimal(ip));
            System.out.println(transferToIpAddress(ipDeci));
        }
    }
    // ip转成10进制数
    public static long transferToIpDecimal(String ip) {
        String[] ips = ip.split("\\.");
        long res = 0;
        for (int i = ips.length - 1, n = 0; i >= 0; i--) {
            res += Integer.parseInt(ips[i]) * Math.pow(2, n);
                n += 8;
            }
        return res;
    }
    // 10进制数转成ip
    public static String transferToIpAddress(long ipDeci) {
        StringBuilder sb = new StringBuilder();
        long ipi = 0;
        while (ipDeci > 0) {
            ipi = ipDeci % (long) Math.pow(2, 8);
            ipDeci = ipDeci / (long) Math.pow(2, 8);
            if (sb.length() == 0) {
                sb = sb.append(ipi);
            } else {
                sb = new StringBuilder().append(ipi).append(".").append(sb);
            }
        }
        return sb.toString();
    }
}
全部评论

相关推荐

评论
9
收藏
分享

创作者周榜

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