32位整形數轉化為IP地址
阿新 • • 發佈:2019-01-05
昨天去參加某大型企業的軟體工程師筆試題,碰到一道程式設計題,做的不太好,於是今天找了個時間把他完整的做出來。僅供參考。
題目是大概這樣的:給一個整數,將它轉化為形如xxx.xxx.xxx.xxx的IP地址。
具體思路如下:1.首先獲取鍵盤輸入,輸入一個整形,同時獲取他的資料型別也是int型,於是考慮用scanner。2.獲取到整數後,需要將它轉化為二進位制數,而且是32位的,於是可以用一個32次的迴圈,採用位移運算子,將1位移n位,再和原數字比較,為0,說明該位是0。3.得到32位的字串後,就要將其8位8位的分割,然後每8位都要轉化為十進位制數,再將這些數用“.”連線起來。此處用一個for迴圈就可以了。
具體的程式碼如下,複製貼上就可以執行。
<span style="font-size:18px;">import java.math.BigInteger; import java.util.Scanner; /*本題要求:給出一個32位的整形數字, (32位01轉化的整形)將其轉化為xxx.xxx.xxx.xxx 的ip地址的字串格式*/ public class IntToIp { public static void main(String[] args) { Scanner sc=new Scanner(System.in);//獲取鍵盤輸入 while(sc.hasNextLong()) { StringBuilder sip=new StringBuilder(); StringBuilder ip=new StringBuilder(); int i=sc.nextInt();//獲取鍵盤輸入的整數 for (int k= 0; k < 32; k++) //將其轉化為32位二進位制數 { sip.append(i>>(31 - k) & 1); } System.out.println("the orginal number is:"+sip); for(int m=0;m<sip.toString().length();m+=8)//每8位向前移動一次 { String str=sip.substring(m, m+7);//獲取字串的8位字元 BigInteger bi=new BigInteger(str,2);//將其轉化為十進位制 if(m!=24)//除了最後一位,數字後都要加點 { ip.append(bi.toString()); ip.append("."); } else { ip.append(bi.toString()); } } System.out.println("IP is :"+ip.toString()); } } } </span>