作为萌新,第一次在CF上的提交,经历了5次才通过。同时这种多次提交经历,说明在考虑问题是不够完备,如何在尽可能少的次数下AC(当然一次最棒)。
问题本身理解起来,或者说完全不需要理解,,,见下图
其实就是给定 a,b (a<=b), 求 b! / a! 的个位数字。
算法的关键是 a,b 的取值。
第一次,算法很直白,直接计算 b(b-1)(b-2)…a 每次累乘前后模10取个位,然而当 (b-a)过大时,累乘次数还是过多,会超时。
第二次,优化算法,经分析,当(b - a >= 100)时,最后答案一定是0.
{这时又忽然发现,不仅 >=100, 只要 >=10 都成立(这意味着还可以更快)}
之后两次出错是在(a==b)的特殊情况疏忽考虑。
下面是代码:
<>`include <stdio.h>
int main(void)
{
long long int a,b,ans,i,t;
scanf("%lld %lld",&a,&b);
ans = b % 10;
t = b - a;
if (t >= 100) ans = 0; /*"if (t>=10)" is also ok.(no proving)*/
else
if (a == b) ans = 1;
else
for(i = b - 1;i > a;i --)
{
ans = ans * (i % 10);
ans = ans % 10;
}
printf("%lld",ans);
return 0;
}