web-dev-qa-db-fra.com

Retourne le premier chiffre d'un entier

Comment, en Java, retournez-vous le premier chiffre d'un entier?

c'est à dire. 

345

Retourne un int de 3.

23
Tony

La manière la plus simple consisterait à utiliser String.valueOf(Math.abs((long)x)).charAt(0) - qui vous le donnera sous la forme char1. Pour obtenir cela en tant que valeur entière, vous pouvez simplement soustraire "0" (comme dans Unicode, "0" à "9" sont contigus).

C'est un peu inutile, bien sûr. Une alternative serait simplement de prendre la valeur absolue, puis de diviser par 10 en arrondissant jusqu'à ce que le nombre soit compris entre 0 et 9. Si c’est un devoir, c’est la réponse que je donnerais. Cependant, je ne vais pas fournir le code pour cela parce que je pense que cela pourrait être un devoir. Toutefois, si vous fournissez des commentaires et modifiez votre réponse pour expliquer votre situation et les problèmes que vous rencontrez, nous pourrons peut-être vous aider.


1Un point important à noter est que la valeur absolue de Integer.MIN_VALUE ne peut pas être représentée par un int - vous devez donc d'abord convertir en un long, puis utiliser Math.abs. , puis fait de l'arithmétique. C'est pourquoi il y a un casting là-bas.

40
Jon Skeet

Encore une autre manière:

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
liwp
public static int firstDigit(int n) {
  while (n < -9 || 9 < n) n /= 10;
  return Math.abs(n);
}

Devrait aussi bien gérer les nombres négatifs. Renverra un premier chiffre négatif dans ce cas.

17
Carl Smotricz

Ignorer les valeurs négatives conduit à:

(""+345).charAt(0);
6
stacker

La solution récursive manquante:

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

Je n'utiliserais pas l'opérateur ternaire dans la vie réelle mais - n'est-ce pas magnifique? ;)

6
Andreas_D

Je trouve celui-ci plus simple: 

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

}
  • Entrée: 123 => Sortie: 1
  • Entrée: -123 => Sortie: -1
3
Aiden
public static int getFirstDigit(int i) {
    while (Math.abs(i) >= 10 ) {
        i = i / 10;
    }
    return Math.abs(i);
}
2
Matthew Flynn

Le moyen le plus rapide serait:

  • Calculez le journal des abs (x), puis prenez parole. Appelons cela n.
  • Diviser le nombre avec 10 ^ n
2
fastcodejava

En regardant le code fourni, cela semble un peu compliquer le tout, voici une solution simple ...

int number = 4085;
int firstDigit = number;
while (firstDigit > 9)
{
      firstDigit = firstDigit / 10;
}
System.out.println("The First Digit is " + firstDigit);
1
Tristan Angel
int main(void) {
  int num = 3421;

  while (num*num + 10 - num*(1 + num) <= 0) {
    num *= (num - 0.9*num)/num;
  }

  std::cout << num << std::endl;
}
1
Chip Uni

Supposons que le numéro est de type int

donc, 

int number = 352
// Change the int into String format
String numberString = Integer.toString(number);
// We can know the first digit of that String with substring method directly
Integer.parseInt(numberString.substring(0,1));

ou l’autre méthode consiste à changer la chaîne en caractère et à obtenir la valeur numérique de

par exemple.

int number = 352;
String numberString = Integer.toString(number);
Character.getNumericValue(String.valueOf(target).charAt(0)); 
// 0 means the first digit of the number
1
Yu Wei Chen

Conseil pour les devoirs: convertissez-le en chaîne et retournez le premier caractère.

1
George Johnston
int a = 354;
int b = (int)(a / Math.Pow(10, (int)Math.Log10(a))); // 3
1
Terje

Je pense que cela pourrait être une bonne façon de faire cela:

public static int length(int number) {
    return (int)Math.log10(Math.abs(number)) + 1;
}

public static int digit(int number, int digit) {
    for (int i = 0; i < digit; i++) {
        number /= 10;
    }
    return Math.abs(number % 10);
}

Fonctionne pour les nombres négatifs et positifs. digit(345, length(345) - 1) retournera 3, digit(345, 0) renverra 5 ex. etc...

0
borchero

Ajuster ma réponse précédente pour gérer Integer.MIN_VALUE et conserver le transtypage trop longtemps en dehors de l'interaction

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

}

0
Matthew Flynn

Je pense plus simple à faire: 

int firstDigit = i-(i/10)*10 // i is an integer or long value, positive or negative.
0
Bruno L.