基于Java解决华为机试实现整数与IP地址间的转换 

 更新时间:2022年02月23日 08:48:25   作者:97的风  
这篇文章主要介绍了基于Java解决华为机试实现整数与IP地址间的转换,文章举例说明围绕文章主题展开相关内容,具有一定的参考价值,需要的小伙伴可以参考一下

1.简述

描述:

原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成

一个长整数。

举例:一个ip地址为10.0.3.193

每段数字                相对应的二进制数

10                          00001010

0                            00000000

3                            00000011

193                        11000001

组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。

本题含有多组输入用例,每组用例需要你将一个ip地址转换为整数、将一个整数转换为ip地址。

数据范围:保证输入的是合法的 IP 序列

输入描述:

输入 :

  • 1 输入IP地址
  • 2 输入10进制型的IP地址

输出描述:

输出:

  • 1 输出转换成10进制的IP地址
  • 2 输出转换后的IP地址

示例1

输入:

10.0.3.193
167969729

输出:

167773121
10.3.3.193

2.代码实现

方法一:通过二进制进行转换

具体方法:

在问题中有两个转换过程,一个是将ip地址转换为长整数,一个是将长整数转换为ip地址,通过题目中的转换过程进行转换。 对于ip地址转换成长整数: 1、将ip地址切割成四段数字 2、每段数字用8位2二进制数字表示 3、将四段二进制数字组合 4、将二进制数字转换成长整数 对于长整数转换成ip地址则步骤相反 1、将长整数转换成32位二进制数字 2、将32位二进制数字进行切割 3、将每段的二进制数字转换为十进制数字 4、形成ip地址

import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String s = sc.next();
            if(s.contains(".")){
                System.out.println(ip2num(s));
            }else{
                System.out.println(num2ip(Long.parseLong(s)));
            }
        }
    }

    public static long ip2num(String ip){
        String[] iip = ip.split("\\.");
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<4; i++){
            int num = Integer.parseInt(iip[i]);  // 拆分
            String num2 = Integer.toBinaryString(num);  //转换为二进制
            while(num2.length()<8){
                num2 = "0" + num2;  // 拼接
            }
            sb.append(num2);
        }
        return Long.parseLong(sb.toString(), 2);  // 转化为10进制
    }

    public static String num2ip(long num){
        String num2 = Long.toBinaryString(num);  //转换为2进制
        while(num2.length()<32){
            num2 = "0" + num2;
        }
        String[] ans = new String[4];
        for(int i=0; i<4; i++){
            String s = num2.substring(8*i, 8*i+8);  //拆分
            s = Integer.toString(Integer.parseInt(s, 2));  //转化为10进制
            ans[i] = s;
        }
        return String.join(".", ans);  //拼接
    }
}

方法二:直接转换(10进制和256进制)

具体方法:

在第一种方法中,我们通过二进制进行转换,但是仔细分析之后,我们发现,二进制在转换过程中并没有起到作用,再进行重新分析,我们可以发现,ip地址实际上是256进制下的四位数字,所以我们可以直接进行转换,将10进制转化为256进制。

import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String s = sc.next();
            if(s.contains(".")){
                System.out.println(ip2num(s));
            }else{
                System.out.println(num2ip(Long.parseLong(s)));
            }
        }
    }

    public static long ip2num(String ip){
        String[] iip = ip.split("\\.");
        Long ans = (long)0;
        for(int i = 0; i<4; i++){
            ans = ans * 256 + Long.parseLong(iip[i]);
        }
        return ans;
    }

    public static String num2ip(long num){
        String[] ans = new String[4];
        for(int i=3; i>=0; i--){
            ans[i] = Long.toString(num % 256);
            num = num / 256;
        }
        return String.join(".", ans);
    }
}

到此这篇关于基于Java解决华为机试实现整数与IP地址间的转换 的文章就介绍到这了,更多相关Java实现整数与IP地址间的转换 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java 利用binarySearch实现抽奖计算逻辑

    Java 利用binarySearch实现抽奖计算逻辑

    这篇文章主要介绍了Java 利用binarySearch实现抽奖计算逻辑,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-12-12
  • Map集合中获取key-value值的实现方法

    Map集合中获取key-value值的实现方法

    这篇文章主要介绍了Map集合中获取key-value值的实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • maven-maven使用-P参数打包不同环境问题

    maven-maven使用-P参数打包不同环境问题

    这篇文章主要介绍了maven-maven使用-P参数打包不同环境问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Java元注解meta-annotation和依赖注入详解

    Java元注解meta-annotation和依赖注入详解

    这篇文章主要给大家介绍了关于Java元注解meta-annotation和依赖注入的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • java开发之基于Validator接口的SpringMVC数据校验方式

    java开发之基于Validator接口的SpringMVC数据校验方式

    这篇文章主要介绍了java开发之基于Validator接口的SpringMVC数据校验方式,文中附含详细示例代码,有需要的朋友可以借鉴参考下
    2021-09-09
  • Java如何对方法进行调用详解

    Java如何对方法进行调用详解

    今天给大家整理了Java如何对方法进行调用,文中有非常详细的介绍及代码示例,对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-06-06
  • 新手学习JQuery基本操作和使用案例解析

    新手学习JQuery基本操作和使用案例解析

    这篇文章主要介绍了新手学习JQuery基本操作和使用案例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • SpringBoot项目访问任意接口出现401错误的解决方案

    SpringBoot项目访问任意接口出现401错误的解决方案

    今天小编就为大家分享一篇关于SpringBoot项目访问任意接口出现401错误的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • springboot+jsonp解决前端跨域问题小结

    springboot+jsonp解决前端跨域问题小结

    这篇文章主要介绍了springboot+jsonp解决前端跨域问题小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • SpringCloud Feign的使用代码实例

    SpringCloud Feign的使用代码实例

    这篇文章主要介绍了SpringCloud Feign的使用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论