【问题标题】:divide every number of long number in java在java中划分每个长数
【发布时间】:2015-06-25 19:47:58
【问题描述】:

我是android开发的新手,我有一个简单的问题。

假设我有一个很长的数字,比如 166516516516516515。

而且我想分割输出,例如: 1,6,6,5,1,6,5,1,6,5,1,6,5,1,6,5,...

我的意思是我希望每一个都输出。

我写了这个算法:

int temp = 2536;
ArrayList<Integer> array = new ArrayList<Integer>();
do {
    array.add(temp % 10);
    temp /= 10;
}
while (temp > 0);
for (int i = 0; i < array.size(); i++) {
    Log.i("LOG", "Dynamic Numbers Array Index #" + i + " = " + array.get(i));
}

它适用于小数(int)

但对于长数字,它并不能真正发挥作用,

如何解决它以处理大数字?

谢谢。

【问题讨论】:

  • 两个零后出现什么错误?
  • @RamanShrivastava 对不起,没关系,只是我不能用长数字来做。 (已编辑)
  • 好的。您尝试使用“长”数字会发生什么情况。理想情况下,如果您的 long 数字在 java 支持的 long 范围内,它应该可以工作。
  • 原始类型(如intlong)是有限制的,它们不可能有你想要的那么大;我想您需要使用BigInteger's 使用更复杂的东西
  • 明白了..你的意思是“长长”而不是“长”..

标签: java android algorithm numbers


【解决方案1】:

只需将这些内容读入字符串并执行:

for(char c : str.toCharArray()){}

不需要分割任何东西,你可以有任意长度。

如果您需要整数,只需执行以下操作即可:

int i = (int)(c - '0');

【讨论】:

    【解决方案2】:

    首先,您需要注意如果您可以将所有数字“填充”到简单的 int 中。如果时间太长,您可能根本无法做到这一点 - 正如您现在可能注意到的那样。

    我采用了另一种方法来解决这个问题,但它可能不是您所需要的。将数字视为字符串。

    String temp = "166516516516516515";
    breakUp(temp);
    
    private static void breakUp(String string){
            int length = string.length();
    
            for (int i = 0; i < length; i++) {
                String temp = string.substring(i, i+1);
                int tempInt = Integer.valueOf(temp);
                System.out.print(tempInt + " - "); //or whatever here, you can make function return list instead of void
            }
        }
    

    【讨论】:

      【解决方案3】:
      import java.io.IOException;
      import java.math.BigInteger;
      import java.util.ArrayList;
      import java.util.List;
      
      public class Callone {
      
      
          public static void main(String[] args)
          {
              BigInteger i = new BigInteger("166516516516516515");
              List<Integer> list = new ArrayList<Integer>();
              BigInteger ten = new BigInteger("10");
              while (!i.equals(BigInteger.ZERO))
              {
                  list.add(0, i.mod(ten).intValue());
                  i = i.divide(ten);
              }
      
              System.out.println(list.toString());
      
      
          }
      }
      

      输出:[1, 6, 6, 5, 1, 6, 5, 1, 6, 5, 1, 6, 5, 1, 6, 5, 1, 5]

      【讨论】:

      • java.math.BigInteger.TENBigInteger[] divideAndRemainder(BigInteger divisor)
      【解决方案4】:

      将 longString 拆分为 intArray

      将longString拆分为char数组,然后使用Character.digit获取数字值。

      public static int[] splitLong(String longStr) {
      
          int i = 0;
          int[] nums = new int[longStr.length()];     
      
          for (char l : longStr.toCharArray())
              nums[i++] = Character.digit(l, 10);     
      
          return nums;
      }
      

      其他方法:

      public static int[] splitLongNum(String longStr) {
      
          int len = longStr.length();
          int[] nums = new int[len];
          for (int j = 0; j < len; j++)
              nums[j] = Character.digit(longStr.charAt(j), 10);
          return nums;
      }
      

      【讨论】:

        猜你喜欢
        • 2014-08-30
        • 1970-01-01
        • 1970-01-01
        • 2021-03-02
        • 1970-01-01
        • 1970-01-01
        • 2017-08-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多