Java - 如何将整数分解成数字
Java - how to break a integer into its digits
这里是新手。我正在为面试练习数据结构和算法。我被困在这种情况下,基本上它需要将一个整数(例如 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
}
这完全取决于您要对分解的数字做什么;但举个例子,这是一种将正整数的数字相加的方法:
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
}
这个适用于任何基地:
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
作为结果变量。
试试这个
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
使方法具有多用途的一种方法是将其设为 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());
您可以使用 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';
}
这里是新手。我正在为面试练习数据结构和算法。我被困在这种情况下,基本上它需要将一个整数(例如 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
}
这完全取决于您要对分解的数字做什么;但举个例子,这是一种将正整数的数字相加的方法:
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
}
这个适用于任何基地:
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
作为结果变量。
试试这个
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
使方法具有多用途的一种方法是将其设为 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());
您可以使用 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';
}