Jon*_*eet 40
在最简单的方法是使用String.valueOf(Math.abs((long)x)).charAt(0)-这将给它,你作为一个char1.要将其作为整数值,您可以减去"0"(如在Unicode中,"0"到"9"是连续的).
当然,这有点浪费.另一种方法是取绝对值,然后循环除以10,直到数字在0-9范围内.如果这是作业,那就是我给出的答案.但是,我不会为它提供代码,因为我认为它可能是功课.但是,如果您提供意见并编辑您的答案,以解释您正在做的以及您遇到的问题,我们可能会提供帮助.
1需要注意的一点是,绝对值Integer.MIN_VALUE不能表示为int- 所以你可能应该首先转换为a long,然后使用Math.abs,然后再算术.这就是为什么那里有演员.
liw*_*iwp 20
另一种方式:
public int firstDigit(int x) {
if (x == 0) return 0;
x = Math.abs(x);
return (int) Math.floor(x / Math.pow(10, Math.floor(Math.log10(x))));
}
Run Code Online (Sandbox Code Playgroud)
Car*_*icz 18
public static int firstDigit(int n) {
while (n < -9 || 9 < n) n /= 10;
return Math.abs(n);
}
Run Code Online (Sandbox Code Playgroud)
也应该很好地处理负数.在这种情况下,将返回负数第一位.
丢失的递归解决方案:
int getFirstInt(int input) {
if (input > 0 ? input < 10 : input > -10) {
return input > 0 ? input : -input;
}
return getFirstInt(input / 10);
}
Run Code Online (Sandbox Code Playgroud)
我不会在现实生活中使用三元运算符但是 - 它不是很漂亮吗?;)
我发现这个更简单:
int firstDigit(int num)
{
if(num/10 == 0)
return num;
return firstDigit(num/10);
}
Run Code Online (Sandbox Code Playgroud)