从Java中的数字中删除数字

时间:2014-01-04 03:02:41

标签: java integer digit

如何删除整数的第一个数字?

我的输入是一个整数(例如i = 123456789)。

然后我要删除第一个数字,以便我等于23456789.

7 个答案:

答案 0 :(得分:11)

这是一种方法:

  • 将其转换为String
  • 不带第一个“数字”的子字符串
  • 将其转换为int

<强>代码:

public static void main(String[] args)
{
    int x = 123456789;

    String x_str = Integer.toString(x);

    int new_x = Integer.parseInt(x_str.substring(1));

    System.out.println(new_x);
}

<强>输出:

23456789

注意:可以使用

在一行中完成
int x = 123456789;
int new_x = Integer.parseInt(Integer.toString(x).substring(1));

修改

要处理否定案例,请检查数字是正数还是整数:

int new_x = Integer.parseInt(x > 0 ? 
    Integer.toString(x).substring(1) : Integer.toString(x).substring(2));

答案 1 :(得分:11)

试试这个

n = n % (int) Math.pow(10, (int) Math.log10(n));

答案 2 :(得分:2)

如果你想避免字符串转换,你可以找到高位并减去它。

public static void main(String[] args) {
    int x = 123456789;
    System.out.println("x = " + x);
    int hi = x, n = 0;
    while (hi > 9) {
        hi /= 10;
        ++n;
    }
    for (int i = 0; i < n; i++) hi *= 10;
    x -= hi;
    System.out.println("x with high digit removed = " + x);
}

答案 3 :(得分:1)

以下是单行纯数字解决方案:

i %= (int) Math.pow(10, (int) Math.log10(i));

答案 4 :(得分:1)

替代方法:

int stripLeading(int i) {
  if(i > 0) {
    return i - (int)Math.pow(10, (int)Math.log10(i));
  } else if(i > 0) {
    return i + (int)Math.pow(10, (int)Math.log(-i+1));
  } else {
    return 0;
  }
}

答案 5 :(得分:1)

我想我记得这个没有字符串的版本...虽然我完全赞同@Christian,但我会怎么做......

注意:正如@Darren Gilroy指出的那样,必须考虑负面和零点,我的功能不能这样做。

当然%也是更好的解决方案。

public static void main (String [] argv)
{
     final int x = 123456789;
     int newX = x;

     /* How many digits are there? */
     final double originalLog = Math.floor (Math.log10 (x));

     /* Let's subtract 10 to that power until the number is smaller */
     final int getRidOf = (int)Math.pow (10, originalLog);
     while (originalLog == Math.floor (Math.log10 (newX)))
     { newX -= getRidOf; }

     System.out.println (newX);
}

分析尝试不佳:

println循环中循环上述函数而不使用for进行20,000,000,000次重复:

real    0m9.943s
user    0m9.890s
sys     0m0.028s

同样基督徒更易于理解且功能完善的版本,但只有200,000,000次重复(因为我很懒,厌倦了等待):

real    0m18.581s
user    0m17.972s
sys     0m0.574s

所以有人可能会说,构造String对象可能会减慢大约200倍,但这不是一个非常精细的分析设置。

答案 6 :(得分:0)

如果你想使用更简单的方法而不使用String,那么这就是我的简单方法:

  1. 计算整数中的位数。
  2. int除以10^nn是位数。
  3. 获得结果的绝对值。 //如果是( - )ve数字。
  4. 例如

    int i = 123456789;
    int n = getDigitCount(i);
    int r = Math.abs(i / (int)Math.pow(10,n)); //r stores result.
    

    你需要这种方法:

    int getDigitCount(int num)
    {
        int c = 0;
        while(num > 0){
            num/=10;
            c++;
        }
        return c;
    }