问题是给出一个数n, 找出n的阶乘右边的第一个非零值.
如15! = 1307674368000, 那么这个值就是8.
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
long long ans = 1;
for (int i = 1; i <= n; ++i) {
ans *= i;
while (ans % 10 == 0) ans /= 10;
ans %= 1000000000;
}
cout << ans % 10;
}
为什么这样就是对的? 为什么模这么多就好了?
我们可以假设这种情况,当n = 1e8, i == n时,乘以ans,结果也不超出long long, 那么可以算出正确结果, 把结的0去掉,再取模缩小范围, 所以这样写是在”数据范围内”,得到答案又不失正确性.