明天我正在参加期末考试,所以我正在练习一些问题。但是我坚持这个问题。
编写一个名为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),我不再需要最后一位数值。
答案 0 :(得分:7)
而不是字符串,你可以这样做:
(Math.abs(x) / Math.pow(10, y - 1)) % 10
abs(n)
负责处理否定案件。n / 10^(y - 1)
将n
截断为第一个(从左侧开始)y
个数字。% 10
获取该结果编号的最后一位数字。答案 1 :(得分:4)
模块化算术可用于完成您想要的任务。例如,如果您将123
除以10
,并取余数,则会得到第一个数字3
。如果您按123
对100
进行整数除法,然后将结果除以10
,则得到第二个数字2
。更一般地,数字的第n个数字可以通过公式(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
希望它有所帮助。
答案 2 :(得分: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));
}
答案 3 :(得分:0)
我将它写入一个字符串,剥离任何前导-ve然后只是索引到字符串(处理你希望基于Java的索引,其中Java使用0)。
答案 4 :(得分:0)
试试这个:
String s = String.valueOf(x);
int index = s.length()- y;
char result = s.charAt(index);