Raman
Raman

Reputation: 1517

split int value into separate digits

I want to split my int value into digits. eg if the no. is 542, the result should be 5,4,2.

I have 2 options. 1) Convert int into String & then by using getCharArray(), i can have separate characters & then i will convert them back into int values.

2) Convert int into String, without converting it into char array, iterate it & get all digits.

Is there any other way to solve the problem. If not, which of the option will be fast?

Upvotes: 17

Views: 100094

Answers (8)

Szabolcs Kovacs
Szabolcs Kovacs

Reputation: 21

This algorithm will split primitive "int" into single digits. It starts from the last digit up to the first one.

class 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

}

Upvotes: 0

Rafiq
Rafiq

Reputation: 71

This will split the digits for you. Now put them into an array instead of printing them out and do whatever you want with the digits. If you want to add them, you could replace the System.out with something like 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)));          
    }
}

Upvotes: 0

GRboss
GRboss

Reputation: 6419

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

Upvotes: 1

keepitreall89
keepitreall89

Reputation: 1230

You could use a Stack instead of an ArrayList if the ordering was a big issue. When popped the digits off the stack you would get them in the correct order, with the most significant digit first.

Upvotes: 2

corsiKa
corsiKa

Reputation: 82559

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

Upvotes: 27

davin
davin

Reputation: 45525

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]

Upvotes: 7

Andrew White
Andrew White

Reputation: 53496

Use the mod 10 rule...

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

Upvotes: 10

posdef
posdef

Reputation: 6532

divide by ten and get remainders, put them in a collection/array of your choice, keep doing this until there the quotient is zero and all you have is a remainder

Upvotes: 2

Related Questions