Java - 如何将整数分成数字

时间:2015-01-11 19:58:27

标签: java integer int

新手在这里。我正在练习面试的数据结构和算法。我坚持这种情况,基本上它需要将整数(例如615)分解为其数字(例如,6,1,5)。我确实在网上找到了一个解决方案,但我觉得必须有更好更简单的方法来做到这一点?

这是我找到的解决方案 -

 int total = sum1 + sum2; //This is the number we want to split
 Integer totalInt = new Integer(total);
 String strSum = totalInt.toString();

 for (int i = 0; i < strSum.length(); i++) {
  String subChar = strSum.substring(i, i + 1);
  int nodeData = Integer.valueOf(subChar);
  newList.append(new Node(nodeData)); //irrelevant in context of question
 }

5 个答案:

答案 0 :(得分:2)

这个适用于任何基地:

int input = yourInput;
final int base = 10; //could be anything
final ArrayList<Integer> result = new ArrayList<>();
while(input != 0) {
    result.add(input % (base));
    input = input / base;
}

如果您需要排序的数字,以便最重要的数字是第一个,您可以使用Stack而不是List作为结果变量。

答案 1 :(得分:2)

您可以将方法设为多用途,方法是将其设为Spliterator。这意味着它可以生成可用于任何目的的Integer流:将它们相加,将它们添加到列表中,无论如何。

如果你不熟悉分裂者,这是一个例子:

public class Digitiser implements Spliterators.OfInt {
    private int currentValue;
    private final int base;
    public Digitiser(int value, int base) {
        currentValue = value;
        this.base = base;
    }
    public boolean tryAdvance(IntConsumer action) {
        if (currentValue == 0) {
            return false;
        } else {
            int digit = value % base;
            value /= base;
            action.accept(digit);
            return true;
        }
    }
    public static IntStream stream(int value, int base) {
        return StreamSupport.intStream(new Digitiser(value, base), false);
}

现在你有了一个通用的数字转换器,可以用来做各种各样的事情:

Digitiser.stream(13242, 10).sum();
Digitiser.stream(42234, 2).collect(Collectors.toList());

答案 2 :(得分:1)

这完全取决于你试图用破碎的数字做什么;但举例来说,这是一种将正整数的数字相加的方法:

int sumOfDigits = 0;
while (n > 0) {
    final int lastDigit = n % 10;    // remainder of n divided by 10
    sumOfDigits += lastDigit;
    n /= 10;                         // divide by 10, to drop the last digit
}

答案 3 :(得分:1)

试试这个

int total = 123; //This is the number we want to split
Integer totalInt = new Integer(total);
String strSum = totalInt.toString();
String nums[] = strSum.split("");

// First element will be empty
// Changed loop initial value i to 0 from 1
for( int i = 0; i < nums.length; i++ ) {
    System.out.println(nums[i]);
    // Or if you want int from it, then
    System.out.println(Integer.parseInt(nums[i]));
}

输出:

1
2
3

答案 4 :(得分:1)

您可以使用toCharArray():

char[] digits = strSum.toCharArray();

然后,将其转换为int []:

int[] numbers = new int[digits.length]; 

for (int i = 0; i < numbers.length; i++) {
    numbers[i] = digits[i] - '0';
}