2011-03-04 38 views
9

我想我的int值分成数字。例如,如果没有。是542,结果应该是5,4,2。分裂int值成独立的数字

我有2种选择。 1)转换成INT字符串&然后通过使用getCharArray()中,i可以具有单独的字符&然后我将它们转换回INT值。

2)转换成INT字符串,而不将其转换成字符数组,迭代它&得到所有数字。

是否有任何其他的方式来解决这个问题。如果不是,哪个选项会很快?

回答

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

如果i = 0,则失败。 – 2011-03-04 16:51:29

+2

该列表将向后。 – 2011-03-04 17:18:10

+0

@Steve够公平 - 负数也失败。特殊情况作为练习留给读者。 – corsiKa 2011-03-04 17:44:59

2

除以十得到剩余物,把他们在您选择的集合/数组,继续这样做,直到商为零,你已经是一个余

6

使用MOD 10规则...

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

你的答案是的OP想要的东西相反的顺序... – davin 2011-03-04 16:10:01

+0

这个问题的精神似乎避免了转换为字符串,然后再返回这是我专注于解决的问题。 – 2011-03-04 16:11:33

+0

thnx安德鲁,为了得到我的观点和解决方案。 – Raman 2011-03-04 16:20:38

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] 
2

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

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

这会为您分割数字。现在把它们放到一个数组中,而不是将它们打印出来,然后用数字做任何你想要的。如果你想添加它们,你可以用sum += z;来代替System.out

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

该算法将原始“int”分成单个数字。它从最后一位数字开始,直到第一位。

类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 

}