Вопрос:

разбить значение int на отдельные цифры

java

80034 просмотра

8 ответа

914 Репутация автора

Я хочу разбить мое значение int на цифры. например, если нет. равно 542, результат должен быть 5,4,2.

У меня есть 2 варианта. 1) Конвертировать int в String и затем с помощью getCharArray () я могу иметь отдельные символы, а затем я преобразую их обратно в значения int.

2) Конвертируйте int в String, не конвертируя его в массив символов, повторяйте его и получайте все цифры.

Есть ли другой способ решить проблему. Если нет, какой из вариантов будет быстрым?

Автор: Raman Источник Размещён: 04.03.2011 04:01

Ответы (8)


2 плюса

4028 Репутация автора

разделите на десять и получите остатки, поместите их в выбранную коллекцию / массив, продолжайте делать это до тех пор, пока частное не станет равным нулю, и все, что у вас есть, это остаток

Автор: posdef Размещён: 04.03.2011 04:04

7 плюса

41102 Репутация автора

Используйте правило мод 10 ...

 List<Integer> digits = new ArrayList<Integer>();
 while (n > 0) {
     digits.add(n%10);
     n/=10;
 }
Автор: Andrew White Размещён: 04.03.2011 04:05

6 плюса

36195 Репутация автора

int num = 542;

if (num<0) num=-num; // maybe you'd like to support negatives
List<Integer> digits = new LinkedList<Integer>();

while (num>0) {
    digits.add(0, num%10);
    num=num/10;
}

System.out.println(Arrays.toString(digits.toArray())); // [5, 4, 2]
Автор: davin Размещён: 04.03.2011 04:05

17 плюса

68578 Репутация автора

Решение
List<Integer> digits(int i) {
    List<Integer> digits = new ArrayList<Integer>();
    while(i > 0) {
        digits.add(i % 10);
        i /= 10;
    }
    return digits;
}
Автор: corsiKa Размещён: 04.03.2011 04:06

2 плюса

740 Репутация автора

Вы можете использовать Stack вместо ArrayList, если упорядочивание было большой проблемой. Когда вы вытаскиваете цифры из стека, вы получите их в правильном порядке, с самой старшей цифрой.

Автор: keepitreall89 Размещён: 04.03.2011 05:58

1 плюс

2373 Репутация автора

int digits(int i) {
    int num=0;
    while(i > 0) {
        num *= 10;
        num += i % 10;
        i /= 10;
    }
    return num;
} 
Автор: GRboss Размещён: 23.03.2014 12:09

0 плюса

1 Репутация автора

Это разделит цифры для вас. Теперь поместите их в массив вместо распечатки и делайте с цифрами все, что хотите. Если вы хотите добавить их, вы можете заменить что- System.outто вроде sum += z;.

public class Splitter {
    public static int numLength(int n) {
        int length;        
        for (length = 1; n % Math.pow(10, length) != n; length++) {}        
        return length;
    }
    public static void splitNums(double x){
        double y, z, t = x;   

        for (int p = numLength((int)x)-1; p >= 1; p--){
             y = t % Math.pow(10, (numLength((int)(t))-1));
             z = ((t - y)/Math.pow(10, p));             
             t = t - (z * Math.pow(10, p)); 

             System.out.println(Math.abs((int)(z)));
        }   
        System.out.println(Math.abs((int)(t)));          
    }
}
Автор: Rafiq Размещён: 24.11.2014 07:09

0 плюса

21 Репутация автора

Этот алгоритм разделит примитив "int" на однозначные числа. Начинается с последней цифры до первой.

class IntegerSplitterDemo {

static boolean digitChoper(int num) {

    for(int i = 10; i <= Integer.MAX_VALUE; i *= 10  ) {

        //Starts from the last digit so it will display the int in reverse order
        int remainder = (i == 10) ? num % 10 : (num % i / (i /10));

        //You can store the remainder value into ArrayList
        System.out.print(remainder + " ");

        //stop iterating the loop
        if(num % i == num) { break; }       
    }
    System.out.println("");
    return true;
} 

public static void main(String[] args) {
    int[] num = {0, 371, 372, 678, 432, 569, 341, 371, 567, 2569874};
    for(int number : num) {
        digitChoper(number);
    }
} // end main

}

Автор: Szabolcs Kovacs Размещён: 10.12.2016 02:05
Вопросы из категории :
32x32