```
public class Solution {
public int trailingZeroes(int n) {
int i = 5; int r = 0;
while(n/i > 0){
r += n/i;
if (Integer.MAX_VALUE / i > 0) i *= 5;
else return r;
}
return r;
}
}
```

my code didn't pass the test case of 1808548329,

(my output: 452137080, 'expected output': 452137076)

but I am still thinking my code is what is correct.

I know some code is slightly different from mine and is accepted, as below:

```
public int trailingZeroes(int n) {
int r = 0;
while (n > 0) {
n /= 5;
r += n;
}
return r;
}
```

but every time you use n /= 5, the 'real n' is no longer what it was, there's some 'loss'!

My solution doesn't change the value of n at all... and the basic philosophy is the same..

anyway, if you disagree, could you let me know where my code is wrong?? thanks!!!