java:数据结构(二)栈的应用(进制转换全收集)
生活随笔
收集整理的這篇文章主要介紹了
java:数据结构(二)栈的应用(进制转换全收集)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
說到進制轉換,java已經封裝了基本的方法,在競賽中使用封裝的方法自然能節省大量時間
另一位仁兄介紹的封裝好的方法:
https://blog.csdn.net/m0_37961948/article/details/80438113
如果不想看上面的全部,我總結了兩條基本方放,記下就可以隨意轉化:
掌握這兩個方法就可以實現任意進制的隨便轉化
?(這個是針對競賽,如果是需要學習底層,大家還在看api研究吧)
再看一個水題:
題目描述
寫出一個程序,接受一個十六進制的數值字符串,輸出該數值的十進制字符串。(多組同時輸入?)
輸入描述:
輸入一個十六進制的數值字符串。
輸出描述:
輸出該數值的十進制字符串。
示例1輸入
0xA輸出
10?由于本題目簡單,所以只給出代碼:
1 import java.util.Scanner; 2 import java.util.*; 3 4 public class Main{ 5 public static void main(String args[]){ 6 Scanner in = new Scanner(System.in); 7 while (in.hasNext()) { 8 String a=in.next(); 9 char[] p=a.toCharArray(); 10 a=String.valueOf(Arrays.copyOfRange(p,2,p.length)); 11 System.out.println(Integer.parseInt(a, 16)); 12 } 13 } 14 }后面就是靠棧實現任意進制不使用已經封裝好的方法:(棧使用的是我自己寫的)
1 /** 2 * 進制轉換 3 * 算法設計:先將其他進制統一轉為10進制,再利用取余法 4 * 將10進制轉為其他進制 5 * @param n 需要轉化的數 6 * @param n1 需要轉化數的進制 7 * @param n2 轉化后的進制 8 * @return 轉換后的數 9 */ 10 static String systemTransformation(String n, int n1, int n2) { 11 MyArraysStack<Character> e=new MyArraysStack<Character>(); 12 char[] a=new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; 13 char[] b=n.toCharArray(); 14 int bNumber=0,t=0; 15 //[start]將n1進制轉為10進制 16 for (char p:b){ 17 e.push(p); 18 } 19 while (!e.isEmpty()){ 20 char temp=e.pop(); 21 bNumber+= Arrays.binarySearch(a,temp)*Math.pow(n1,t); 22 t++; 23 } 24 //[end] 25 //[start] 將10進制轉為n2進制 26 StringBuilder builder=new StringBuilder(); 27 while (bNumber>0){ 28 e.push(a[bNumber%n2]); 29 bNumber/=n2; 30 } 31 while (!e.isEmpty()) { 32 builder.append(e.pop()); 33 } 34 //[end] 35 String str; 36 str=builder.toString(); 37 return str; 38 } * 算法設計:先將其他進制統一轉為10進制,再利用取余法 * 將10進制轉為其他進制* 最高到16進制向其他任意一進制轉化
* 如果需要更大的進制則需要擴充a數組即可
當你覺得自己在進制轉換上已經完全ok了,此時我又遇到了一道有趣的題目:
題目描述
輸入兩個整數,求兩個整數二進制格式有多少個位不同輸入描述:
兩個整數輸出描述:
二進制不同位的個數 示例1輸入
22 33輸出
5 一看到這道題我首先想到,先將兩個數轉為二進制,然后循環比對出值(突然感到十分麻煩)然后一看討論發現了騷操作:
使用異或:
1 public class Solution { 2 /** 3 * 獲得兩個整形二進制表達位數不同的數量 4 * 5 * @param m 整數m 6 * @param n 整數n 7 * @return 整型 8 */ 9 public int countBitDiff(int m, int n) { 10 String str=Integer.toBinaryString(m^n); 11 str=str.replaceAll("0",""); 12 return str.length(); 13 } 14 }
異或就是不同為1,相同為0,將m和n異或,是位運算,m^n的結果是m和n二進制的異或結果
Integer.toBinaryString();將m^n轉為二進制然后替換了字符串里面的0,返回字符串長度,即得到了不同的位數
?轉載于:https://www.cnblogs.com/lzy321/p/10388131.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的java:数据结构(二)栈的应用(进制转换全收集)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react 中子组件调用父组件的方法
- 下一篇: Linux环境下虚拟环境virtuale