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

整数与IP地址间的转换

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) {
        BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder str = new StringBuilder();
        String a, b;
        try {
            a = r.readLine();
            b = r.readLine();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        char[] chs1 = a.toCharArray();
        char[] chs2 = b.toCharArray();
        int i = 0, j = 0, l, num = 0, ans1 = 0;
        long ans = 0;
        int[] i1 = new int[4];//存储数组
        l = chs1.length;
        do {//获得ip四位数,并放入数组
            if (chs1[i] == '.') {
                i1[j++] = num;
                num = 0;
                i++;
            }
            num *= 10;
            num += chs1[i] - '0';
            if (i == l - 1) i1[j] = num;
            i++;
        } while (i < l);
        i = 3;
        do {//遍历数组
            ans = (long) i1[3 - i] << i * 8 | ans;//左移后和之前的值按位或运算
            i--;
        } while (i > -1);
        str.append(ans).append("\n");//将十进制结果放入String Builder
        i = 0;
        l = chs2.length;
        do {//计算输入的十进制数
            ans1 *= 10;
            ans1 += chs2[i] - '0';
            i++;
        } while (i < l);
        i = 0;
        do {
            str.append((ans1 << 8 * i + 32) >>>
                       56);//先左移去除高位,后右移获得该8位的值
            if (i != 3) str.append(".");
            i++;
        } while (i < 4);
        System.out.print(str);//将结果放入String Builder
    }
}

全部评论

相关推荐

04-06 11:24
已编辑
太原学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务