Насколько я понимаю, такой функции не существует. У вас есть несколько ошибок, которые стоит обсудить.
Я проверил три параметра (разбиение строки и выполнение операции модуля и создание массива символов) через некоторые параметры, и это самый «эффективный» из всех, что я видел. Обратите внимание на некоторые предположения:
- Мы должны поддерживать Long
- Мы сохраняем тот факт, что знаковый бит числа, но не в массиве.
Сначала маршрут модуля, который на первый взгляд должен быть наиболее эффективным. Однако, если число действительно длинное (например, превышает максимальное значение типа int), то оператор мода переполняется и выдает нежелательные результаты. Итак, мы должны перейти к BigInteger (насколько я могу судить, если кто-то видит лучшее решение, прокомментируйте):
public static void main(String[] args) {
long x = 981212131233123L;
int[] r = new int[calculateSize(x)];
boolean positive = fillArrayWithDigits(x, r);
//r = [9, 8, 1, 2, 1 ...
}
private static boolean fillArrayWithDigits(long y, int[] r) {
boolean positive = y >= 0;
y = Math.abs(y);
BigInteger ten = BigInteger.valueOf(10);
for (int i = r.length; i > 0; i--) {
r[i-1] = BigInteger.valueOf(y).mod(ten).intValue();
y /= 10L;
}
return positive;
}
private static int calculateSize(long y) {
int size = 0;
do {
size++;
y /= 10L;
} while (y != 0);
return size;
}
В конце этого у вас есть логическое значение, указывающее, было ли число положительным, и массив, содержащий числа.
С точки зрения анализа строк самое лучшее, что я мог придумать, было:
public static void main(String[] args) {
long x = 981212131233123L;
boolean positive = x >= 0;
x = Math.abs(x);
String[] s = Long.toString(x).split("");
int[] r = new int[s.length - 1];
for (int i = r.length; i > 0; i--) {
r[i-1] = Integer.parseInt(s[i]);
}
//r = [9, 8, 1, 2, 1 ...
}
Метод массива char был очень похож:
public static void main(String[] args) {
long x = 981212131233123L;
boolean positive = x >= 0;
x = Math.abs(x);
char[] s = Long.toString(x).toCharArray();
int[] r = new int[s.length];
for (int i = r.length - 1; i > -1; i--) {
r[i] = Character.digit(s[i], 10);
}
//r = [9, 8 ,1, 2, 1 ....
}
но кажется наиболее эффективным