题意:给出0《l《=r《=9e18,然后问其间有多少个不同的:i!末尾0的个数。
题解:就是i!有几个10的因素。10是由2*5,有5一定会有2,所以看5出现就会多一种情况。那么n是5有2种(1,2,3.。等是0个。。。),10有3种。之后用0到l的方法,但是看l是否是5的倍数,是的话就减去直接减去(l-1)。如果不是的话,先加1再减。
重点:关键是搞出来5是关键,而且只要求不同的0的个数,不同就行,不用担心一下增加了几个0.然后lr方法时注意下
轩哥的代码
#include <cstdio>
using namespace std;
long long l, r, add, sub;
int main() {
while (scanf("%lld%lld", &l, &r), l|r) {
if (l == 0) {
printf("%lld\n", r/5 + 1);//算r
continue;
}
add = r/5 + 1;
sub = (l-1)/5 + 1;//算l
if (l % 5 == 0) {//如果%5就不用管
printf("%lld\n", add - sub);
}
else {
printf("%lld\n", add - sub + 1);
}
}
return 0;
}