Итерации через каждую цифру в числе
Я пытаюсь создать программу, которая сообщит, является ли число, данное ему "Счастливое число" или нет. Поиск счастливого числа требует, чтобы каждая цифра была в квадрате, и результат каждого квадрата цифры добавлялся вместе.
В Python вы можете использовать что-то вроде этого:
SQUARE[d] for d in str(n)
Но я не могу найти, как перебирать каждую цифру в числе в Java. Как вы можете сказать, я новичок в этом и не могу найти ответ в документах Java.
Ответы
Ответ 1
Вы можете использовать операцию modulo 10, чтобы получить самое правое число, а затем разделить число на 10, чтобы получить следующий номер.
long addSquaresOfDigits(int number) {
long result = 0;
int tmp = 0;
while(number > 0) {
tmp = number % 10;
result += tmp * tmp;
number /= 10;
}
return result;
}
Вы также можете поместить его в строку и превратить ее в массив char и перебрать через него что-то вроде Math.pow(charArray[i] - '0', 2.0);
Ответ 2
Предполагая, что число представляет собой целое число, начиная с:
int num = 56;
String strNum = "" + num;
int strLength = strNum.length();
int sum = 0;
for (int i = 0; i < strLength; ++i) {
int digit = Integer.parseInt(strNum.charAt(i));
sum += (digit * digit);
}
Ответ 3
Я задавался вопросом, какой метод будет быстрее всего разбить положительное число на его цифры в Java, String vs modulo
public static ArrayList<Integer> splitViaString(long number) {
ArrayList<Integer> result = new ArrayList<>();
String s = Long.toString(number);
for (int i = 0; i < s.length(); i++) {
result.add(s.charAt(i) - '0');
}
return result; // MSD at start of list
}
против
public static ArrayList<Integer> splitViaModulo(long number) {
ArrayList<Integer> result = new ArrayList<>();
while (number > 0) {
int digit = (int) (number % 10);
result.add(digit);
number /= 10;
}
return result; // LSD at start of list
}
Тестирование каждого метода путем передачи Long.MAX_VALUE
10 000 000 раз, строковая версия заняла 2.090 секунд, а модульная версия - 2.334 секунды. (Oracle Java 8 на 64-битном Ubuntu, работающем в Eclipse Neon)
Значит, в этом не много, но я был немного удивлен тем, что String была быстрее