将int值拆分为单独的数字

时间:2011-03-04 16:01:23

标签: java

我想将int值拆分为数字。例如,如果没有。是542,结果应该是5,4,2。

我有两个选择。 1)将int转换为String&然后通过使用getCharArray(),我可以有单独的字符&然后我会将它们转换回int值。

2)将int转换为String,而不将其转换为char数组,迭代它&得到所有数字。

还有其他方法可以解决问题。如果没有,哪个选项会很快?

8 个答案:

答案 0 :(得分:17)

List<Integer> digits(int i) {
    List<Integer> digits = new ArrayList<Integer>();
    while(i > 0) {
        digits.add(i % 10);
        i /= 10;
    }
    return digits;
}

答案 1 :(得分:7)

使用mod 10规则......

 List<Integer> digits = new ArrayList<Integer>();
 while (n > 0) {
     digits.add(n%10);
     n/=10;
 }

答案 2 :(得分:6)

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]

答案 3 :(得分:2)

除以十并获得剩余部分,将它们放入您选择的集合/数组中,继续这样做,直到商为零并且您拥有的是剩余部分

答案 4 :(得分:2)

如果排序是一个大问题,您可以使用Stack而不是ArrayList。当从堆栈中弹出数字时,您将以正确的顺序获得它们,首先是最重要的数字。

答案 5 :(得分:1)

int digits(int i) {
    int num=0;
    while(i > 0) {
        num *= 10;
        num += i % 10;
        i /= 10;
    }
    return num;
} 

答案 6 :(得分:0)

这将为您分割数字。现在将它们放入一个数组而不是打印出来,并用数字做任何你想做的事情。如果您要添加它们,可以将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)));          
    }
}

答案 7 :(得分:0)

该算法将拆分原语&#34; int&#34;成个位数。它从最后一个数字开始直到第一个数字。

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

}