洛谷 P1134 階乘問題

2021-07-26 12:44:50 字數 757 閱讀 6668

題目概述

給出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...