基於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地址間的轉換 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: