題目概述
給出n,求n!最右邊第一位的非0數。
解題思路
對於乙個數的階乘,末尾的0只會以2*5的形式產生。而1到n中因數2的數量遠遠大於5,因此我們可以通過找因數5的方式來濾掉末尾的0;
這裡還有另乙個規律:除去0!和1!,本題的答案只可能是2,4,6,8。這4個數乘上末位是6的數,結果還是自己,因此可以將這種情況省略。
時間複雜度:o(n)
空間複雜度:o(1)
源程式
vari,n,t:longint;
ans:int64;
begin
read(n);
ans:=1;
for i:=2 to n do
begin
if i mod 10=6 then continue;
t:=i;
while t mod 5=0 do
begin
t:=t div 5;
ans:=ans shr 1;
end;
ans:=ans*t;
if ans>100000000000 then ans:=ans mod 100000000000;
end;
write(ans mod 10);
end.
P1134 階乘問題
也許你早就知道階乘的含義,n階乘是由1到n相乘而產生,如 12 1 times 2 times 3 times 4 times 5 times 6 times 7 times 8 times 9 times 10 times 11 times 12 479,001,60012 1 2 3 4 5 6...
P1134 階乘問題
題意 求出 n 去掉後導 0 之後的最後一位 首先後導 0 最簡單是由 2 5 得來的 於是想到乙個騷操作,先把每個數的 2,5 提出來,一對一對地消掉,就把後導 0 去掉了 因為在 1 n 中因子 2 一定比 5 多,所以最後讓 2 的個數減去 5 的個數 然後對於剩下的 2 不想寫快速冪 發現只...
P1134 階乘問題
也許你早就知道階乘的含義,n階乘是由1到n相乘而產生,如 12 1 times 2 times 3 times 4 times 5 times 6 times 7 times 8 times 9 times 10 times 11 times 12 479,001,60012 1 2 3 4 5 6...