返回整数的第一个数字

Ton*_*ony 24 java int

在Java中如何返回整数的第一个数字.

345

返回3的int.

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,然后再算术.这就是为什么那里有演员.

  • 我不喜欢这个解决方案涉及将数字转换为字符串,但我确实喜欢它是一个oneliner,你得到了我的投票. (3认同)
  • (1String.valueOf(-Math.abs(x)).charAt(1)` ?还是有点晦涩?) (2认同)
  • @Carl:那里只有一个强制转换(到long),还有三个方法调用(valueOf,abs,charAt)。第二种形式的循环建议仍然需要强制转换(或隐式转换)和“ abs”来应对“ Integer.MIN_VALUE”。我也不同意这是拜占庭式的-对我来说,这似乎很自然。从格式化的角度来看,整数实际上只有一个“第一位数字”-因此将其转换为字符串并采用第一个字符是很明显的,不是吗?其他复杂性仅仅是由于应对负数。 (2认同)

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)

  • 我很有兴趣知道每个整数是否正常工作.我会担心浮点不准确蔓延 - 但它可能没问题.难以有效测试...... (3认同)

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)

也应该很好地处理负数.在这种情况下,将返回负数第一位.

  • @Gennadiy,对不起,自从你发表评论以来,我编辑了我的解决方案,但之前也没有错.方形大于81的任何整数值的绝对值都大于9,因为它是一个整数,表示它至少为10. (2认同)

sta*_*ker 7

忽略负值会导致:

(""+345).charAt(0);
Run Code Online (Sandbox Code Playgroud)


And*_*s_D 6

丢失的递归解决方案:

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)

我不会在现实生活中使用三元运算符但是 - 它不是很漂亮吗?;)

  • 这不会是一个问题,因为你从不试图否定MIN_VALUE,但只是试图否定-1和-9之间的值,这些(显然)具有正的等价物. (2认同)

Aid*_*den 5

我发现这个更简单:

int firstDigit(int num)
{
    if(num/10 == 0)
        return num;
    return firstDigit(num/10);

}
Run Code Online (Sandbox Code Playgroud)
  • 输入:123 => 输出:1
  • 输入:-123 => 输出:-1