どのようにJava整数の最初の桁を返しますか??
つまり.
345
3の整数を返します。
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.abs
、then算術を行います。だからキャストがあります。
さらに別の方法:
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);
}
負の数もうまく処理できるはずです。その場合、負の最初の数字を返します。
負の値を無視すると、次の結果になります。
(""+345).charAt(0);
不足している再帰的ソリューション:
int getFirstInt(int input) {
if (input > 0 ? input < 10 : input > -10) {
return input > 0 ? input : -input;
}
return getFirstInt(input / 10);
}
私は実生活で三項演算子を使用しませんが、それは美しいものではありませんか? ;)
更新: 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);
}
私はこれをもっと簡単に見つけました:
int firstDigit(int num)
{
if(num/10 == 0)
return num;
return firstDigit(num/10);
}
最速の方法は次のとおりです。
宿題のヒント:文字列に変換し、最初の文字を返します。
提供されているコードを見ると、全体を複雑にするのは少し難しいようです。ここに簡単な解決策があります...
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;
}
数値が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
int a = 354;
int b = (int)(a / Math.Pow(10, (int)Math.Log10(a))); // 3
私はこれを行うには良い方法かもしれないと思う:
_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を返します。等々...
前回の回答を調整して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);
}
私はもっと簡単にできると思います:
int firstDigit = i-(i/10)*10 // i is an integer or long value, positive or negative.