Comment, en Java, retournez-vous le premier chiffre d'un entier?
c'est à dire.
345
Retourne un int de 3.
La manière la plus simple consisterait à utiliser String.valueOf(Math.abs((long)x)).charAt(0)
- qui vous le donnera sous la forme char
1. 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.
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))));
}
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.
Ignorer les valeurs négatives conduit à:
(""+345).charAt(0);
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? ;)
Je trouve celui-ci plus simple:
int firstDigit(int num)
{
if(num/10 == 0)
return num;
return firstDigit(num/10);
}
public static int getFirstDigit(int i) {
while (Math.abs(i) >= 10 ) {
i = i / 10;
}
return Math.abs(i);
}
Le moyen le plus rapide serait:
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);
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;
}
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
Conseil pour les devoirs: convertissez-le en chaîne et retournez le premier caractère.
int a = 354;
int b = (int)(a / Math.Pow(10, (int)Math.Log10(a))); // 3
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...
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);
}
Je pense plus simple à faire:
int firstDigit = i-(i/10)*10 // i is an integer or long value, positive or negative.