2011-03-04 67 views
9

我想我的int值分成數字。例如,如果沒有。是542,結果應該是5,4,2。分裂int值成獨立的數字

我有2種選擇。 1)轉換成INT字符串&然後通過使用getCharArray()中,i可以具有單獨的字符&然後我將它們轉換回INT值。

2)轉換成INT字符串,而不將其轉換成字符數組,迭代它&得到所有數字。

是否有任何其他的方式來解決這個問題。如果不是,哪個選項會很快?

回答

17
List<Integer> digits(int i) { 
    List<Integer> digits = new ArrayList<Integer>(); 
    while(i > 0) { 
     digits.add(i % 10); 
     i /= 10; 
    } 
    return digits; 
} 
+2

如果i = 0,則失敗。 – 2011-03-04 16:51:29

+2

該列表將向後。 – 2011-03-04 17:18:10

+0

@Steve夠公平 - 負數也失敗。特殊情況作爲練習留給讀者。 – corsiKa 2011-03-04 17:44:59

2

除以十得到剩餘物,把他們在您選擇的集合/數組,繼續這樣做,直到商爲零,你已經是一個餘

6

使用MOD 10規則...

List<Integer> digits = new ArrayList<Integer>(); 
while (n > 0) { 
    digits.add(n%10); 
    n/=10; 
} 
+0

你的答案是的OP想要的東西相反的順序... – davin 2011-03-04 16:10:01

+0

這個問題的精神似乎避免了轉換爲字符串,然後再返回這是我專注於解決的問題。 – 2011-03-04 16:11:33

+0

thnx安德魯,爲了得到我的觀點和解決方案。 – Raman 2011-03-04 16:20:38

6
int num = 542; 

if (num<0) num=-num; // maybe you'd like to support negatives 
List<Integer> digits = new LinkedList<Integer>(); 

while (num>0) { 
    digits.add(0, num%10); 
    num=num/10; 
} 

System.out.println(Arrays.toString(digits.toArray())); // [5, 4, 2] 
2

你可以使用一個堆棧,而不是一個ArrayList,如果排序是一個大問題。當從堆疊中彈出數字時,您將按照正確的順序得到它們,首先是最重要的數字。

1
int digits(int i) { 
    int num=0; 
    while(i > 0) { 
     num *= 10; 
     num += i % 10; 
     i /= 10; 
    } 
    return num; 
} 
0

這會爲您分割數字。現在把它們放到一個數組中,而不是將它們打印出來,然後用數字做任何你想要的。如果你想添加它們,你可以用sum += z;來代替System.out

public class Splitter { 
    public static int numLength(int n) { 
     int length;   
     for (length = 1; n % Math.pow(10, length) != n; length++) {}   
     return length; 
    } 
    public static void splitNums(double x){ 
     double y, z, t = x; 

     for (int p = numLength((int)x)-1; p >= 1; p--){ 
      y = t % Math.pow(10, (numLength((int)(t))-1)); 
      z = ((t - y)/Math.pow(10, p));    
      t = t - (z * Math.pow(10, p)); 

      System.out.println(Math.abs((int)(z))); 
     } 
     System.out.println(Math.abs((int)(t)));   
    } 
} 
0

該算法將原始「int」分成單個數字。它從最後一位數字開始,直到第一位。

類IntegerSplitterDemo {

static boolean digitChoper(int num) { 

    for(int i = 10; i <= Integer.MAX_VALUE; i *= 10 ) { 

     //Starts from the last digit so it will display the int in reverse order 
     int remainder = (i == 10) ? num % 10 : (num % i/(i /10)); 

     //You can store the remainder value into ArrayList 
     System.out.print(remainder + " "); 

     //stop iterating the loop 
     if(num % i == num) { break; }  
    } 
    System.out.println(""); 
    return true; 
} 

public static void main(String[] args) { 
    int[] num = {0, 371, 372, 678, 432, 569, 341, 371, 567, 2569874}; 
    for(int number : num) { 
     digitChoper(number); 
    } 
} // end main 

}