2011-03-04 23 views
9

Quiero dividir mi valor int en dígitos. por ejemplo, si el no. es 542, el resultado debería ser 5,4,2.dividir el valor int en dígitos separados

Tengo 2 opciones. 1) Convierta int en String & y luego usando getCharArray(), puedo tener caracteres separados & y luego los convertiré nuevamente en valores int.

2) Convierta int en String, sin convertirlo en una matriz de caracteres, repítalo & obtenga todos los dígitos.

¿Hay alguna otra manera de resolver el problema. Si no, ¿cuál de las opciones será rápida?

Respuesta

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

Error si i = 0. –

+2

La lista será al revés. –

+0

@Steve es lo suficientemente justo: también falla para números negativos. Casos especiales dejados como un ejercicio para el lector. – corsiKa

2

dividir por diez y obtener restos, ponerlos en una colección/serie de su elección, seguir haciendo esto hasta que el cociente es cero y todo lo que tienes es un resto

6

utilizar la regla mod 10 ...

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

su respuesta es en orden inverso a lo que el PO quería ... – davin

+0

El espíritu de la cuestión parece estar evitando la conversión de una cadena y de vuelta que es lo que me enfoqué en resolver. –

+0

Thnx Andrew, por obtener mi punto y solución. – 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

se puede utilizar una pila en lugar de un ArrayList si el pedido fue un gran problema. Cuando saca los dígitos de la pila, los obtendría en el orden correcto, primero con el dígito más significativo.

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

Esto dividirá los dígitos para usted. Ahora colóquelos en una matriz en lugar de imprimirlos y haga lo que quiera con los dígitos. Si desea agregarlos, puede reemplazar el System.out con algo como sum += z;.

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

Este algoritmo dividirá la primitiva "int" en un solo dígito. Comienza desde el último dígito hasta el primero.

clase 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 

}

Cuestiones relacionadas