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

整数与IP地址间的转换

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

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        /**********************************************************************************/
        // IPv4 转 整数
        String[] strs = scan.nextLine().split("\\.");
        StringBuffer sb = new StringBuffer("");
        for (String str : strs) {
            sb.append(DecimalToBinary(str, 8));
        }
        System.out.println(BinaryToDecimal(new String(sb), 31));
        /**********************************************************************************/
        // 整数 转 IPv4
        String decimal = scan.nextLine();
        String binary = DecimalToBinary(decimal, 32);
        System.out.println(BinaryToIPv4(binary));
    }
    public static String DecimalToBinary(String str, int k) {
        long num = Long.valueOf(str);
        StringBuffer sb = new StringBuffer("");
        while (0 != num) {
            sb.append(num % 2);
            num /= 2;
        }
        while (sb.length() != k) {
            sb.append("0");
        }
        sb.reverse();
        return new String(sb);
    }
    public static long BinaryToDecimal(String str, int k) {
        long ans = 0l;
        String[] strs = str.split("");
        for (int i = strs.length - 1; i > -1; i--) {
            if (Integer.valueOf(strs[i]) == 1) {
                ans += Math.pow(2, k - i);
            }
        }
        return ans;
    }
    public static String BinaryToIPv4(String str) {
        StringBuffer sb = new StringBuffer("");
        for (int splitIndex = 8; splitIndex <= 32; splitIndex += 8) {
            String tmp = str.substring(splitIndex - 8, splitIndex);
            if (splitIndex == 32) {
                sb.append(BinaryToDecimal(tmp, 7));
                break;
            }
            tmp = BinaryToDecimal(tmp, 7) + ".";
            sb.append(tmp);
        }
        return new String(sb);
    }
}
全部评论
该牛油正在参与牛客写题解薅羊毛的活动,牛币,周边,京东卡超多奖品放送,活动进入倒计时!快来捡漏啦https://www.nowcoder.com/discuss/888949?source_id=profile_create_nctrack&channel=-1
点赞 回复 分享
发布于 2022-04-20 16:53

相关推荐

11-30 11:07
河南大学 Java
宇宙厂 测开 n*15
丘丘给个offer:有后选后
点赞 评论 收藏
分享
10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
11-04 14:10
东南大学 Java
_可乐多加冰_:去市公司包卖卡的
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务