如何删除整数的第一个数字?
我的输入是一个整数(例如i = 123456789)。
然后我要删除第一个数字,以便我等于23456789.
答案 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
,那么这就是我的简单方法:
int
除以10^n
。 n
是位数。例如
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;
}