zoukankan      html  css  js  c++  java
  • 华为上机: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;
        }
  • 相关阅读:
    Binary Tree Maximum Path Sum
    ZigZag Conversion
    Longest Common Prefix
    Reverse Linked List II
    Populating Next Right Pointers in Each Node
    Populating Next Right Pointers in Each Node II
    Rotate List
    Path Sum II
    [Leetcode]-- Gray Code
    Subsets II
  • 原文地址:https://www.cnblogs.com/bbbblog/p/5707690.html
Copyright © 2011-2022 走看看