Вернуть первую цифру целого числа - PullRequest
24 голосов
/ 12 января 2010

Как в Java вы возвращаете первую цифру целого числа?

Ответы [ 23 ]

40 голосов
/ 12 января 2010

Самый простой способ - использовать String.valueOf(Math.abs((long)x)).charAt(0) - это даст вам char 1 . Чтобы получить это как целочисленное значение, вы можете просто вычесть «0» (как в Unicode, «0» - «9» являются смежными).

Это несколько расточительно, конечно. Альтернативой было бы просто взять абсолютное значение, а затем сделать круговое деление на 10, пока число не окажется в диапазоне 0-9. Если это домашнее задание, это ответ, который я бы дал. Однако я не собираюсь предоставлять код для этого, потому что я думаю, что может быть домашней работой. Однако, если вы предоставите комментарии и отредактируете свой ответ, чтобы объяснить, как у вас идут дела и с какими проблемами вы столкнулись, мы можем помочь.


1 Стоит заметить, что абсолютное значение Integer.MIN_VALUE не может быть представлено как int - поэтому вы можете сначала преобразовать в long, а затем использовать Math.abs, , затем сделать арифметику. Вот почему там есть актерский состав.

19 голосов
/ 12 января 2010

Еще один способ:

public int firstDigit(int x) {
  if (x == 0) return 0;
  x = Math.abs(x);
  return (int) Math.floor(x / Math.pow(10, Math.floor(Math.log10(x))));
}
18 голосов
/ 12 января 2010
public static int firstDigit(int n) {
  while (n < -9 || 9 < n) n /= 10;
  return Math.abs(n);
}

Должен также хорошо справляться с отрицательными числами. В этом случае вернет отрицательную первую цифру.

7 голосов
/ 13 января 2010

Игнорирование отрицательных значений приводит к:

(""+345).charAt(0);
6 голосов
/ 12 января 2010

Отсутствует рекурсивное решение:

int getFirstInt(int input) {
  if (input > 0 ? input < 10 : input > -10) {
    return input > 0 ? input : -input;
  }
  return getFirstInt(input / 10);
}

Я бы не использовал троичный оператор в реальной жизни, но разве это не прекрасно?;)

3 голосов
/ 06 апреля 2015

Я считаю это еще проще:

int firstDigit(int num)
{
    if(num/10 == 0)
        return num;
    return firstDigit(num/10);

}
  • Вход: 123 => Выход: 1
  • Вход: -123 => Выход: -1
3 голосов
/ 12 января 2010

Обновлен: Чтобы обработать Integer.MIN_VALUE и оставить Math.abs () и приведение к длинному из цикла:

public static int getFirstDigit(int i) {
    i = Math.abs(i / (Math.abs((long)i) >= 10 ) ? 10 : 1);
    while (i >= 10 ) 
        i /= 10;
    return i;
}

Оригинальный ответ:

return Math.abs(i);
}    public static int getFirstDigit(int i) {
        while (Math.abs(i) >= 10 ) {
            i = i / 10;
        }
        return Math.abs(i);
    }
2 голосов
/ 12 января 2010

Самый быстрый способ будет:

  • Вычислить журнал абс (х), затем получить слово. Давайте назовем это n.
  • Разделите число на 10 ^ n
2 голосов
/ 12 января 2010

Подсказка к домашнему заданию: преобразовать его в строку и вернуть первый символ.

1 голос
/ 13 января 2010
int a = 354;
int b = (int)(a / Math.Pow(10, (int)Math.Log10(a))); // 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...