从整数中删除第n个数字而不转换为字符串

时间:2018-01-05 17:16:03

标签: java integer digits

假设我在java中有这个整数,987654321。我希望能够删除,比如说第三和第四位,这样我就可以在java中获得9876521

我知道我可以通过转换为字符串然后获取子字符串来实现这一点,但有没有办法在不转换为字符串的情况下执行此操作?

2 个答案:

答案 0 :(得分:7)

%和/是你的朋友!使用模数和除法,我们可以得到我们想要的数字。

我们使用模数来消除最高有效数字,并使用除法来消除最低有效数字。我们可以使用除法,因为余数会被截断。

然后我们将这两个操作中的两个部分放在一起。但是,我们需要将从分区中获得的数字移位到最低有效位数的空间。

拿987654321/10000,这会给你98765(让我们称之为x)

取987654321%100,这将给你21(让我们打电话给你)

x * 100 + y = 9876521。

更一般地说,如果你想从数字n中删除一个到第b个数字(其中a< b),

n%10 ^(a-1)+((n / 10 ^(b))* 10 ^(a-1))

答案 1 :(得分: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 }));