如何在Java中统计整数的尾随零? (例如:234000 => 3个零)

时间:2014-09-10 19:21:07

标签: java integer

标题几乎是自我解释的。 :)

1232 => 0
1231030 => 1
2000 => 3
34444400000 => 5

8 个答案:

答案 0 :(得分:9)

如果它适合int / long,只需检查模10的数字是否为0并保留计数器:

long x = ...
if (x == 0) {
    return 0;
}
int counter = 0;
while (x % 10 == 0) {
    counter++;
    x /= 10;
}

如果它太大而无法放入long,请将其存储在String中并从最后一个字符中计算零:

String s = ...
int counter = 0;
while(counter < s.length() && s.charAt(s.length() - 1 - counter) == '0') {
    counter++;
}

答案 1 :(得分:2)

三行:

int zeroes = 0
while(num%10 == 0 && num != 0) {
  zeroes++;
  num /= 10;
}

这使用模数运算符。只要我们可以在没有余数的情况下除以10,就增加计数器。

答案 2 :(得分:2)

你总是可以使用正则表达式:

Pattern pattern = Pattern.compile("(0+)$");
Matcher matcher = pattern.matcher(String.valueOf(123140000));
Integer trailingZeroes = 0;
if (matcher.find()) {
    trailingZeroes = matcher.group(1).length();
} 
System.out.println(trailingZeroes);

答案 3 :(得分:2)

这是使用Java 8 Streams的另一种解决方案:

int trailingZeros = String.valueOf(number).chars()
        .reduce(0, (count, ch) -> (ch == '0') ? count + 1 : 0);

这会将数字转换为IntStream。然后使用lambda减少此流,每次出现非零字符时,lambda会重置计数器。

答案 4 :(得分:2)

Integer 类有一个内置函数来计算尾随零。 javadocs

int trailingZeroes = Integer.numberOfTrailingZeros(int i);

答案 5 :(得分:0)

没有尝试过此代码,但这应该可行。

int counterForZeros=0;
for(long i=10;true;)
{
    if(num%i==0)
    {
        counterForZeros++;
        i*=10;
    }
    else 
    {
        break;
    }
}
System.out.println("Number of zeros in "+num+" is "+counterForZeros);

答案 6 :(得分:0)

你可以将int转换为String并反向迭代,计算零,直到找到一个不为零的字符:

int countZeros(int x){
    String a = Integer.toString(x);
    int numOfZeros = 0;
    for(int i = a.length() - 1; i >= 0; i--)
        if (a.charAt(i) != '0') break;
        else numOfZeros ++;

    return numOfZeros;          
}

测试:
System.out.println(countZeros(25000));将打印3
System.out.println(countZeros(25));将打印0

希望这有帮助。

答案 7 :(得分:0)

好吧,如果这是一场比赛,看谁能在最少的线上做到这一点:

trailingZeroes = String.valueOf(num).length() - String.valueOf(num).replaceAll("0*$","").length();