0

我明天要期末考试,所以我正在练习一些问题。但我被这个问题困住了。

编写一个名为 getNthDigit 的方法,它返回整数的第 n 位。它也适用于负数。

例如。

CALL                    VALUE RETURNED
getNthDigit(123,1)      3
getNthDigit(123,2)      2
getNthDigit(123,3)      1
getNthDigit(-123,1)     3

我的代码:

public static void getNthDigit(int x,int y){

x=Math.abs(x);
x%10;

}

我的思考过程是每次我将它取模 10,它给了我最后一个数字。但它仍然是错误的。就像我调用 getNthDigit(123,2) 一样,我不再需要最后一个数字值。

4

5 回答 5

7

而不是字符串,你可以这样做:

(Math.abs(x) / Math.pow(10, y - 1)) % 10
  • abs(n)处理负面情况。
  • n / 10^(y - 1)截断n到第一个(从左数)y数字。
  • % 10获取该结果数字的最后一位。
于 2013-04-24T05:00:13.060 回答
4

模数运算可以用来完成你想要的。例如,如果您除以12310取余数,您将得到第一个数字3。如果你做整数除法然后除以结果123,你会得到第二个数字。更一般地,一个数的第 n 位可以通过以下公式获得100102(number / base^(n-1)) % base:

public int getNthDigit(int number, int base, int n) {    
  return (int) ((number / Math.pow(base, n - 1)) % base);
}

System.out.println(getNthDigit(123, 10, 1));  // 3
System.out.println(getNthDigit(123, 10, 2));  // 2
System.out.println(getNthDigit(123, 10, 3));  // 1

希望能帮助到你。

于 2013-04-24T05:00:24.743 回答
0

为什么不简单地将数字转换为字符串,然后在所需位置获取字符?

public static void getNthDigit(int x,int y){
    String str = String.valueOf(x);
    if(str.charAt(0) == '-')
        y++;
    System.out.println(str.charAt(y-1));
}
于 2013-04-24T04:57:09.027 回答
0

我会把它写成一个字符串,去掉任何前导 -ve 然后只索引到字符串中(处理你想要基于 1 的索引而 Java 使用基于 0 的索引的事实)。

于 2013-04-24T04:57:57.373 回答
0

尝试这个:

String s = String.valueOf(x);
int index = s.length()- y;
char result = s.charAt(index);
于 2013-04-24T04:59:24.833 回答