【问题标题】:split int value into separate digits将 int 值拆分为单独的数字
【发布时间】:2011-07-08 22:42:36
【问题描述】:

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

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

2) 将 int 转换为 String,不转换为 char 数组,对其进行迭代并获取所有数字。

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

【问题讨论】:

    标签: java


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      使用 mod 10 规则...

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

      【讨论】:

      • 问题的精神似乎是避免转换为字符串并再次返回,这是我重点解决的问题。
      【解决方案3】:
      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]
      

      【讨论】:

        【解决方案4】:
        List<Integer> digits(int i) {
            List<Integer> digits = new ArrayList<Integer>();
            while(i > 0) {
                digits.add(i % 10);
                i /= 10;
            }
            return digits;
        }
        

        【讨论】:

        • @Steve 很公平 - 负数也失败了。特殊情况留给读者作为练习。
        • @Eric 这取决于你对倒退的定义,不是吗?这又是整个“大端,小端”的辩论。
        • @All:通过这个逻辑,我只是​​想计算所有数字的总和,所以数字是否为正并不困扰我。我的主要目的是计算 2 的产品。仅使用加法。
        • 我刚刚意识到我最好使用LinkedList&lt;Integer&gt; 而不是ArrayList,因为这里不需要随机访问。
        • 在考虑了更多之后,我认为ArrayList 是正确的选择,毕竟因为顺序内存和它在迭代器中被访问的可能性很高。此外,它的默认值为 10,非常适合 int。
        【解决方案5】:

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

        【讨论】:

          【解决方案6】:
          int digits(int i) {
              int num=0;
              while(i > 0) {
                  num *= 10;
                  num += i % 10;
                  i /= 10;
              }
              return num;
          } 
          

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

              此算法会将原始“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
              

              }

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2022-01-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多