0

有什么东西可以用来查看一个数字是否以与另一个数字相同的数字开头?前任。5643 和 5377 都以 5 开头。

有没有办法用数字来做到这一点,还是必须是字符串?(以。。开始?)

4

7 回答 7

7

Ich n1 和 n2 是您的数字:

return (n1.toString().charAt(0) == n2.toString().charAt(0));

您将不得不使用 Integer 而不是 int,因为 int 没有 .toString() 方法。

如果 n1 是一个 int,你可以使用 new Integer(n1).toString()。

甚至更好(Bombe 建议):

String.valueOf(n1).charAt(0) == String.valueOf(n2).charAt(0)
于 2009-03-16T18:08:53.200 回答
1

递归除以十,直到整个除法小于十,然后那个数字是第一个,你可以比较数字。

于 2009-03-16T18:09:31.937 回答
1

您可以计算第一个数字:

public int getFirstDigit(int number) {
    while (number >= 10) {
        number /= 10;
    }
    return number;
}

(这仅适用于正数。)

但话又说回来,您可以只比较字符串表示的第一个字符。字符串比较可能会比较慢,但由于您的问题是“获取字符串表示的第一个字符”,它可能只是合适的解决方案。:)

于 2009-03-16T18:09:37.380 回答
1

最直接的方法(允许不同的长度值)可能就像你说的那样,将它们都转换为字符串。

int x = 5643;
int y = 5377;
String sx, sy;

sx = "" + x;        // Converts int 5643 to String "5643"
sy = "" + y;

boolean match = (sx.charAt(0) == sy.charAt(0));
于 2009-03-16T18:13:42.737 回答
1
  public static byte firstDigit(int number) {
    while (true) {
      int temp = number / 10;

      if (temp == 0) {
        return (byte) Math.abs(number);
      }

      number = temp;
    }
于 2009-03-16T18:21:56.493 回答
1

(int)(a / 10 ** (int)Math.log10(a))

可能比字符串解决方案效率低,但没有循环,它使我们保持在“数字”领域。

(永远记住,当您谈论数字中的位数时,log10 是您的朋友)

也不适用于负数 - 取第一个的绝对值。

于 2009-03-16T20:20:37.860 回答
-1

对于整数,int n1 和 int n2;

return ("" + n1).charAt(0) == ("" + n2).charAt(0);
于 2009-03-17T10:42:32.033 回答