Java 整數類型取基數
對於數值的基數讀取,博主這裏有兩個方案,如果有其他讀取方案,可以寫在評論
首先是第一種方案
public class Base1 {
public int[] base(int index) {
String str = index+""; //將數值轉換爲字符串類型
char[] c = str.toCharArray();
int[] arrayInt = new int[c.length];
for (int i = 0; i < c.length; i++) {
String s = c[i]+"";
arrayInt[i]= Integer.parseInt(s);
}
return arrayInt;
}
public static void main(String[] args) {
int[] array= new Base().base(157896);
for (int i = 0; i < array.length; i++) {
if(i!=0) System.out.print(" ");
System.out.print(array[i]);
}
}
}
**運行結果:1 5 7 8 9 6**
然後我們來看第二種方案
public class Base2 {
public int[] base(int index) {
String str = index+"";
int[] array = new int[str.length()];
for(int i = 1,j=0 ; i <= index ; i*=10,j++) {
array[j] = index / i %10;
}
return array;
}
public static void main(String[] args) {
int[] array= new Base2().base(157896);
for (int i = 0; i < array.length; i++) {
if(i!=0) System.out.print(" ");
System.out.print(array[i]);
}
}
}
**運行結果:6 9 8 7 5 1**
第一種方案的思路來源與Python的eval()函數;這種方案的優點是空間佔用不大,空間複雜度沒有第二種高。
第二種方案的時間複雜度可能會小一點,但是由於第二種方案有數值運算符的存在,所以這兩個方案差不多,都挺優秀的。
總結一下:如果對返回的數組不做調試,第一種返回的屬於從左到右的順序返回,所以想要從個位數調用得這樣寫for循環
int[] array= new Base1().base(157896);
for (int i = array.length-1; i >=0; i--) {
if(i!=array.length-1) System.out.print(" ");
System.out.print(array[i]);
}
而第二種就不需要倒着寫
int[] array= new Base2().base(157896);
for (int i = 0; i < array.length; i++) {
if(i!=0) System.out.print(" ");
System.out.print(array[i]);
}