从整数中删除第 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 }));