如果我想要打印一个数字的最后一位(比如16),我使用:数字%10,输出为6.如果我想在最后一位之前打印数字,我可以将数字除以10转为int。这仅适用于数字!如果我想获得6之前的数字,我肯定会获得0,但挑战是获得相同的数字而不是0.这是怎么回事?
答案 0 :(得分:2)
一个简单的实现可能如下所示:
import static java.lang.Math.abs;
import static java.lang.Math.max;
import static java.lang.Math.min;
public static void main(String[] args) {
System.out.println(getNthNumber(-16, -14)); // 1
System.out.println(getNthNumber(16, -14)); // 1
System.out.println(getNthNumber(16, 0)); // 1
System.out.println(getNthNumber(16, 1)); // 6
System.out.println(getNthNumber(16, 4)); // 6
System.out.println(getNthNumber(12345678, 4)); // 5
}
static int getNthNumber(final int pNumber, final int pIndex) {
final String numberString = Integer.toString(abs(pNumber));
return numberString.charAt(max(0, min(pIndex, numberString.length() - 1))) - '0';
}
答案 1 :(得分:1)
我不确定,但我认为你对某些事感到困惑。这是直截了当的数学方法:
int i = 16;
int lastDigit = i % 10;
int precedingDigit = (i / 10) % 10;
在Java中,当你进行整数除法时,结果总是向零舍入。
对于您提供的示例,如果是5.您希望两次获得相同的数字:
int i = 5;
int lastDigit = i % 10;
int precedingDigit = (i == lastDigit) ? lastDigit : ((i / 10) % 10);