package sam.numbers; import java.util.Arrays; public class SplitNumber { public static int[] split(int num) { if(num < 10 && num > -10) return new int[]{num}; boolean negative = num < 0; num = Math.abs(num); int[] split; if(num < 100) split = new int[2]; else if(num < 1000) split = new int[3]; else if(num < 10000) split = new int[4]; else split = new int[10]; int k = 0; while(num > 0) { if(k >= split.length) Arrays.copyOf(split, split.length + split.length/2 ); split[k++] = num % 10; num /= 10; } if(k != split.length) split = Arrays.copyOf(split, k); for (int i = 0, j = split.length - 1; i < j; i++, j--) { int t = split[i]; split[i] = split[j]; split[j] = t; } if(negative) split[0] = -1 * split[0]; return split; } }
@Test void test() { check(1, 1); check(-1, -1); check(-11, -1, 1); check(11, 1, 1); check(-123, -1, 2, 3); check(123, 1, 2, 3); check(-1234, -1, 2, 3, 4); check(1234, 1, 2, 3, 4); check(-1234567, -1, 2, 3, 4,5,6,7); check(1234567, 1, 2, 3, 4,5,6,7); } private void check(int i, int... expected) { int[] actual = SplitNumber.split(i); System.out.printf("%-10s%s\n", i, Arrays.toString(actual)); assertArrayEquals(expected, actual); }
1 [1] -1 [-1] -11 [-1, 1] 11 [1, 1] -123 [-1, 2, 3] 123 [1, 2, 3] -1234 [-1, 2, 3, 4] 1234 [1, 2, 3, 4] -1234567 [-1, 2, 3, 4, 5, 6, 7] 1234567 [1, 2, 3, 4, 5, 6, 7]
No comments:
Post a Comment