Reputation: 1517
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
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
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
Reputation: 6419
int digits(int i) {
int num=0;
while(i > 0) {
num *= 10;
num += i % 10;
i /= 10;
}
return num;
}
Upvotes: 1
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
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
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
Reputation: 53496
Use the mod 10 rule...
List<Integer> digits = new ArrayList<Integer>();
while (n > 0) {
digits.add(n%10);
n/=10;
}
Upvotes: 10
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