题解 P1134 【阶乘问题】
这道题,暴力可以过。
暴力方法:暴力乘,每次保留得到的数的后6~7位左右(保证不出现误差)留太多位会时超。如果每次 mod 10,会造成误差.因为当相乘后得到的是10的倍数时,mod 10 会变成0.所以每次大概mod 100000或10000000.最后输出ans%10
原理:最后一位相乘只会影响最后一位.故只保留最后6~7位就行了 废话不说上代码。
var
n,i:longint;
ans:qword;//答案
function lastdigit(v:qword):qword;
begin
while v mod 10=0 do v:=v div 10;//求最后的6位非0数
lastdigit:=v mod 1000000;//答案
end;
begin
readln(n);//读入n
ans:=1;//初始化,ans不能是0
for i:=2 to n do
ans:=lastdigit(i*ans);//ans每次都乘i
writeln(ans mod 10);//直接摸到0就好,不用担心ans mod 10会是0;
end.