从整数中删除第 n 个数字而不转换为字符串
Remove nth digit from an integer without converting to string
假设我在 java、987654321
中有这个整数。我希望能够删除第三和第四位数字,这样我就可以在 java.
中得到 9876521
我知道我可以通过转换为字符串,然后取一个子字符串来做到这一点,但是有没有办法在不转换为字符串的情况下做到这一点?
%和/是你的朋友!使用模数和除法我们可以得到我们想要的数字。
我们使用模数来消除最高有效位,并使用除法来消除最低有效位。我们可以使用除法,因为余数会被截断。
然后我们把这两次操作得到的两块拼在一起。但是,我们需要移动从除法中得到的数字,以便为最低有效数字留出空间。
取 987654321 / 10000,这将给你 98765(我们称之为 x)
取 987654321 % 100,这会给你 21(我们称它为 y)
x * 100 + y = 9876521.
更一般地说,如果您想从数字 n 中删除 a 到 b 位数字(其中 a < b),
n % 10^(a-1) + ((n / 10^(b)) * 10^(a-1))
这将只删除一个数字:
public static int RemoveNthPosition(int input, int position) {
int leftDivider = (int) Math.pow(10.0, position);
int rightDivider = (int) Math.pow(10.0, position - 1);
int leftSide = input / leftDivider;
int rightSide = input % rightDivider;
return leftSide * rightDivider + rightSide;
}
同时删除多个:
public static int RemoveMultiplePositions(int input, int[] positions) {
Arrays.sort(positions);
int result = input;
for (int count = 0; count < positions.length; count++) {
result = RemoveNthPosition(result, positions[count] - count);
}
return result;
}
在你的情况下,它将是:
System.out.println(RemoveMultiplePositions(987654321, new int[] { 3, 4 }));
假设我在 java、987654321
中有这个整数。我希望能够删除第三和第四位数字,这样我就可以在 java.
9876521
我知道我可以通过转换为字符串,然后取一个子字符串来做到这一点,但是有没有办法在不转换为字符串的情况下做到这一点?
%和/是你的朋友!使用模数和除法我们可以得到我们想要的数字。
我们使用模数来消除最高有效位,并使用除法来消除最低有效位。我们可以使用除法,因为余数会被截断。
然后我们把这两次操作得到的两块拼在一起。但是,我们需要移动从除法中得到的数字,以便为最低有效数字留出空间。
取 987654321 / 10000,这将给你 98765(我们称之为 x)
取 987654321 % 100,这会给你 21(我们称它为 y)
x * 100 + y = 9876521.
更一般地说,如果您想从数字 n 中删除 a 到 b 位数字(其中 a < b),
n % 10^(a-1) + ((n / 10^(b)) * 10^(a-1))
这将只删除一个数字:
public static int RemoveNthPosition(int input, int position) {
int leftDivider = (int) Math.pow(10.0, position);
int rightDivider = (int) Math.pow(10.0, position - 1);
int leftSide = input / leftDivider;
int rightSide = input % rightDivider;
return leftSide * rightDivider + rightSide;
}
同时删除多个:
public static int RemoveMultiplePositions(int input, int[] positions) {
Arrays.sort(positions);
int result = input;
for (int count = 0; count < positions.length; count++) {
result = RemoveNthPosition(result, positions[count] - count);
}
return result;
}
在你的情况下,它将是:
System.out.println(RemoveMultiplePositions(987654321, new int[] { 3, 4 }));