2011-03-04 10 views
9

int değerinizi sayılara bölmek istiyorum. örneğin, hayır. 542, sonuç 5,4,2 olmalıdır.int değerini ayrı basamaklara ayırma

2 seçeneğim var. 1) int & dizgesine dönüştür, sonra getCharArray() işlevini kullanarak, & ayrı karakterlere sahip olabilirim, sonra bunları int değerlerine dönüştüreceğim.

2) int dizisine, diziye dönüştürmeden dönüştürün, tüm rakamları & yineleyin.

Sorunu çözmenin başka bir yolu var mı? Değilse, hangi seçenek hızlı olacak?

cevap

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 ise başarısız olur. –

+2

Liste geriye doğru olacaktır. –

+0

@Steve yeterince adil - negatif sayılar için de başarısız. Okuyucu için egzersiz olarak bırakılan özel durumlar. – corsiKa

2

böl on tarafından ve, seçtiğiniz bir koleksiyon/dizide koyun, kalanlar olsun bölüm sıfırdır ve sahip tüm mod 10 kuralı kalan

6

Kullanım orada kadar böyle devam ... sipariş büyük bir sorun olsaydı

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

Cevabınız ... soru – davin

+0

ruhu bir dizeye ve tekrar dönüşüm kaçınarak gibi görünüyor OP istediğini ters sırada bulunuyor Çözmeye odaklandığım şey budur. Benim nokta ve çözüm almak için –

+0

Thnx Andrew. – Raman

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

bir ArrayList'in yerine Yığını kullanabilirsiniz. Rakamları yığından attığında, onları önce en önemli rakamla doğru sırayla elde edersiniz.

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

Bu, sizin için rakamları böler. Şimdi onları basmak yerine bir dizinin içine koyun ve rakamlarla istediğiniz şeyi yapın. Bunları eklemek isterseniz, System.out'u sum += z; gibi bir şeyle değiştirebilirsiniz.

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

Bu algoritma ilkel "int" yi tek hanelere ayırır. Son basamaktan ilk olana kadar başlar.

sınıf 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 

}