web-dev-qa-db-ja.com

整数の最初の桁を返します

どのようにJava整数の最初の桁を返しますか??

つまり.

345

3の整数を返します。

24
Tony

easiestの方法はString.valueOf(Math.abs((long)x)).charAt(0)を使用することです-これはcharとして与えます1。これを整数値として取得するには、「0」を減算するだけです(Unicodeのように、「0」から「9」は連続しています)。

もちろん、いくらか無駄です。別の方法は、絶対値を取得してから、数値が0〜9の範囲になるまで10で除算するループラウンドです。これが宿題なら、それが私が与える答えです。ただし、might宿題だと思うので、コードを提供しません。ただし、コメントを提供し、回答を編集して、現在の状況や実行中の問題を説明する場合は、サポートできる場合があります。


1注意すべき注意点の1つは、Integer.MIN_VALUEの絶対値をintとして表現できないことです。したがって、最初にlongに変換してから、Math.absthen算術を行います。だからキャストがあります。

40
Jon Skeet

さらに別の方法:

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

負の数もうまく処理できるはずです。その場合、負の最初の数字を返します。

18
Carl Smotricz

負の値を無視すると、次の結果になります。

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

不足している再帰的ソリューション:

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

私は実生活で三項演算子を使用しませんが、それは美しいものではありませんか? ;)

6
Andreas_D

更新: 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);
    }
3
Matthew Flynn

私はこれをもっと簡単に見つけました:

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

}
  • 入力:123 =>出力:1
  • 入力:-123 =>出力:-1
3
Aiden

最速の方法は次のとおりです。

  • Abs(x)のログを計算し、フロアを取得します。それをnと呼びましょう。
  • 数値を10 ^ nで割ります
2
fastcodejava

宿題のヒント:文字列に変換し、最初の文字を返します。

2
George Johnston

提供されているコードを見ると、全体を複​​雑にするのは少し難しいようです。ここに簡単な解決策があります...

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

数値がint型であると仮定します

したがって、

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));

または、Stringをcharに変更し、charから数値を取得する方法もあります

例えば.

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
int a = 354;
int b = (int)(a / Math.Pow(10, (int)Math.Log10(a))); // 3
1
Terje

私はこれを行うには良い方法かもしれないと思う:

_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);
}
_

負数と正数の両方で機能します。 digit(345, length(345) - 1)は_3_を返し、digit(345, 0)は5を返します。等々...

0
borchero

前回の回答を調整してInteger.MIN_VALUEを処理し、キャストをインタレーションから長く保つ:

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

私はもっ​​と簡単にできると思います:

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