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

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

Ответы [ 23 ]

0 голосов
/ 10 июля 2015

Вот чрезвычайно простой способ получения первой и второй цифр целого числа отдельно, но это будет работать только для ровно двух цифр!

    int firstDigit = number / 10;
    int secondDigit = number % 10;

Для ситуации, когда пользователь может ввести больше или меньше цифр, но когда вы, возможно, не знаете, сколько, вы можете попробовать этот подход, но другие ответы имеют лучшие решения для этого случая. Я только что написал эту полную программу, которую вы можете вставить в компилятор и запустить. Как только вы увидите шаблон, вы можете проверить столько цифр, сколько хотите, а затем просто поймать на длину больше, чем вы хотите принять:

package testingdigits;

import java.util.Scanner;

public class TestingDigits {


Scanner keyboard = new Scanner(System.in);    

public static void main(String[] args) 
{

Scanner keyboard = new Scanner(System.in);

System.out.printf("\nEnter a number to test:");
int number = keyboard.nextInt();

int length = (int) Math.log10(number) + 1; //This gets the length of the number of digits used 

//Initializing variables first to prevent error
int firstDigit = 0, secondDigit = 0, thirdDigit = 0, fourthDigit = 0, fifthDigit = 0, sixthDigit = 0;

    if (length == 1)
     {
        firstDigit = number;
        System.out.println("" + firstDigit);
     }
    if (length == 2)
     {
        firstDigit = number / 10; //For example, 89/10 will output 8.9 and show as 8 in this case.
        secondDigit = number % 10;
        System.out.println("" + firstDigit + "" + secondDigit);
     }
    if (length == 3)
     {
        firstDigit = number / 10 / 10; // 123/10/10 is 1.23 and will show as 1
        secondDigit = number / 10 % 10;
        thirdDigit = number % 10;
        System.out.println("" + firstDigit + "" + secondDigit + "" + thirdDigit);
     }
    if (length == 4)
     {
        firstDigit = number / 10 / 10 / 10; 
        secondDigit = number / 10 / 10 % 10;
        thirdDigit = number / 10 % 10;
        fourthDigit = number % 10;
        System.out.println("" + firstDigit + "" + secondDigit + "" + thirdDigit + "" + fourthDigit);
     }
     if (length == 5)
     {
        firstDigit = number / 10 / 10 / 10 / 10; 
        secondDigit = number / 10 / 10 / 10 % 10;
        thirdDigit = number / 10 / 10 % 10;
        fourthDigit = number / 10 % 10;
        fifthDigit = number % 10;
        System.out.println("" + firstDigit + "" + secondDigit + "" + thirdDigit + "" + fourthDigit + "" + fifthDigit);
     }
    //You can probably see the pattern by now. It's not an elegant solution, but is very readable by even beginners:     
    if ((length == 6))
     {
        firstDigit = number / 10 / 10 / 10 / 10 / 10; //The first digit is divided by 10 for however many digits are after it
        secondDigit = number / 10 / 10 / 10 % 10;
        thirdDigit = number / 10 / 10 / 10 % 10;
        fourthDigit = number / 10 / 10 % 10;
        fifthDigit = number / 10 % 10; //The second to last always looks like this
        sixthDigit = number % 10;  //The last digit always looks like this no matter how big you go
        System.out.println("" + firstDigit + "" + secondDigit + "" + thirdDigit + "" + fourthDigit + "" + fifthDigit + "" + sixthDigit);
     }
    if ((length > 6))
     {
        //The main problem with this approach is that you have to define in advance how many digits you are working with
        //So it's simple, but not very elegant, and requires something to catch unexpected input from the user.
        System.out.println("Invalid Input!");
     }

  }

}

Как программа, она просто выводит именно то число, которое вы вводите, но, как вы можете видеть, она делает это так, что показывает, что она может разделять цифры пользовательского ввода, чтобы вы могли использовать ее в качестве теста для простого Программа, но, опять же, она не так хороша, как некоторые другие решения здесь, это просто читабельный подход, который хорошо работает для начинающих. Он также отлично воспринимает негативы.

Также: в случае, когда вы начинаете с двойного, вы можете использовать следующее для преобразования в int и усечения десятичных дробей:

numberInt = (int)number;
0 голосов
/ 13 июня 2015

Я думаю, что это может быть хорошим способом сделать это:

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 голосов
/ 12 января 2010

Это Groovy, но его легко конвертировать в Java:

int firstNum(int x) {
    a = Math.abs(x)
    sig = Math.floor(Math.log10(a))
    return a / Math.pow(10, sig)
}

Результаты:

groovy> println (firstNum (345))
3

groovy> println (firstNum (3452))
3

groovy> println (firstNum (-112))
1

groovy> println (firstNum (9999))
9

groovy> println (firstNum (Integer.MAX_VALUE))
2

groovy> println (firstNum (Integer.MIN_VALUE + 1))
2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...