我正在研究一个Java问题,其中我需要检查任意大小的int的第二个前导数字(例如:123中的“ 2”或58347中的“ 8”)是否是特定数字(例如“ 2”或“ 5”),然后将true分配给布尔值(如果是该数字)。我正在尝试做模/除数方法,但是如果数量很大,我将无法提取第二个前导数字。
我搜索了Stack Overflow,发现了一个非常相似的问题。但是,如果数字被硬编码为两位数,则该问题的解决方案将起作用。我知道有一种将int转换为String的方法,并且我成功地尝试了该方法,但是我需要使用int / modulo / division方法。我尝试做(n%100)/ 10;但它让我倒数第二位(例如:4562374中的“ 7”),而不是倒数第二位。
// n is a number such as 123, or 25, or 52856.
while (n > 0) {
int i=((n%10)/10);
if( (i==2)||(i==3) || (i==5)|| (i==7) )
{ secondDigit=true; }
else { secondDigit= false; } }
System.out.println(secondDigit);
答案 0 :(得分:2)
只要保持除以10直到数字<100,然后对10做模,例如:
class Main {
public static void main(String[] args) {
int n = 58347;
while (n >= 100) {
n /= 10;
}
System.out.println(n % 10); // prints 8
}
}
答案 1 :(得分:0)
不确定这种方法的效率,但是它易于阅读。
pages
但是,您必须确保该数字超过1位。
答案 2 :(得分:0)
与其反复地对数字进行除法直到它足够小以供您处理,不如找出数字有多大,以便只需要进行一次除法?
我的意思是,您应该考虑使用对数来找出数字的大小。找出数字的以10为底的对数,即可得出其幅值。对于100,log_10为2,因此您可以执行以下操作:
long magnitude = Math.log10(number);
long divisor = Math.pow(10, magnitude - 1);
long smallNumber = number / divisor;
int digit = smallNumber % 10;