• 华为上机:IP地址转换


    IP地址转换
    描述:

    IP地址的长度为32,即有2^32-1个地址。IP地址一般采用点分十进制表示法,例如"192.168.1.1"。IP地址也可以直接用一个32位的整数进行表示。本题目要求根据给定的整数IP地址表示发,将其转换为点分十进制的形式。

    举个例子:

          输入整数IP地址为 3232235777

          其对应十六进制为 0xC0A80101

          每字节转为十进制 0xC0=192,0xA8=168,0x01=1,0x01=1

          则输出为 192.168.1.1

    运行时间限制: 1 Sec
    内存限制: 100 MByte
    输入:

    32位正整数IP地址

    输出:

    点分十进制IP地址

    样例输入:
    3232235777
    样例输出:
    192.168.1.1
    答案提示:

    程序写的有问题,ip对于的整数比较小的适合有错误,100分只得了29分

    167773121
    10.3.3.193
    这个就报错
    下面程序是严格一位一位的计算,出错了

    import java.util.*;
    
    public class Main6{
        public static void main(String[] args){
            Scanner in = new Scanner(System.in);
            while(in.hasNext()){
                Long longA = in.nextLong();
    //            String hex = longToHex(longA);
                String hex = Long.toHexString(longA);
                hex = hex.toUpperCase();
                String ip = hexToIP(hex);
                System.out.println(ip);
            }
            
            in.close();
        }
        public static String hexToIP(String hex){
            StringBuffer sb = new StringBuffer();
            int i;
            String s;
            for( i=0;i<hex.length()-2;i=i+2){
                s = hex.substring(i,i+2);
                sb.append(hexToInt(s));
                sb.append('.');
            }
            s = hex.substring(i,i+2);
            sb.append(hexToInt(s));
            return sb.toString();
        }
        /**
         * 16进制 转化成 10进制
         * @param str
         * @return
         */
        public static int hexToInt(String str){
            int res = 0;
            int n = str.length();
            int pow = (int)Math.pow(16, n-1);
            for(int i=0;i<n;i++){
                char ch = str.charAt(i);
                if(ch<='9'){
                    res += (ch-48)*pow;
                }else{
                    res += (ch-'A'+10)*pow;
                }
                pow/=16;
            }
            return res;
        }
        /**
         * 十进制转化成十六进制
         * @param x
         * @return
         */
        public static String longToHex(long x){
            String[] a = new String[]{"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E"};
            StringBuffer sb = new StringBuffer();
            while(x>0){
                int id = (int)(x%16); //求余数,对于数组id 
                sb.insert(0, a[id]); // 插入到第0个位置
                x=x/16; // 更新
                
            }
    //        sb.insert(0, "0x");
            
            return sb.toString();
        }
    }

    百度一下

    通过位运算比较简单了,但是违背了题意思

        public static String bugs(long temp){
                 long a=((temp&0xff000000)>>24);
                 long b=((temp&0x00ff0000)>>16);
                 long c=((temp&0x0000ff00)>>8);
                 long d=(temp&0x000000ff);
                 return a+"."+b+"."+c+"."+d;
        }
  • 相关阅读:
    没有插件的sublime编辑器是没有灵魂的
    原生JS简单的无缝自动轮播
    自学前端的日子,记录我的秃头之旅
    简洁快速的数组去重
    最困难的是带着自己的选择生活下去
    css画图那些事
    css3画图那些事(三角形、圆形、梯形等)
    SVN那些事
    关于使用JQ scrollTop方法进行滚动定位
    linux下mysql出现Access denied for user 'root'@'localhost' (using password: YES)解决方法
  • 原文地址:https://www.cnblogs.com/theskulls/p/5707690.html
Copyright © 2020-2023  润新知