luoguP1134 階乘問題

2021-08-18 18:57:20 字數 3564 閱讀 9134

也許你早就知道階乘的含義,n階乘是由1到n相乘而產生,如:12!12!

==

1' role="presentation" style="position: relative;">11x

2 2

x 3' role="presentation" style="position: relative;">33x

4 4

x 5' role="presentation" style="position: relative;">55x

6 6

x 7' role="presentation" style="position: relative;">77x

8 8

x 9' role="presentation" style="position: relative;">99x

10 10

x 11 11

x 12 12

==

479,001

,600

' role="presentation" style="position: relative;">479

,001

,600

479,

001,

600

12 12

的階乘最右邊的非零位為

6 6

。寫乙個程式,計算n(

1<=

n<=50,

000,

000)

' role="presentation" style="position: relative;">n(1

<=

n<=50,

000,

000)n(

1<=

n<=50,

000,

000)

階乘的最右邊的非零位的值。

注意:10

,000

,00010,

000,

000!有

2499999

2499999

個零。輸入格式:

僅一行包含乙個正整數

n n

。輸出格式:

單獨一行包含乙個整數表示最右邊的非零位的值。

輸入樣例#1:

12' role="presentation" style="position: relative;">1212

輸出樣例#1:

6 6

usacotr

aini

ngse

ctio

n3.2

' role="presentation" style="position: relative;">usa

cotr

aini

ngse

ctio

n3.2us

acot

rain

ings

ecti

on3.2

小菜雞好久沒有和大家見面了,今天感到格外開心。

來,幫小菜雞再挑戰新高度。

上個星期,和一幫師兄(都是大神)聽課。

其中有一道題比較感興趣。

那就是本題了。

難度為 普及/提高- 。

小菜雞一開始沒開題覺得很難,畢竟是和一群da

lao dal

ao

上課。但一看題其實並沒有想象的那麼難,開來審題還是非常重要的。

這道題小菜雞覺得和下面這道小學生賽題目,有點相似。

1.連續零(難度係數:容易)

(1.pas/cpp/c)

【題目描述】

輸入兩個正整數a和b,s為a到b之間(包含a、b)所有整數的乘積,求s末尾從個位開始有多少個連續的0。

比如a=1,b=7,那麼s=1*2*3*4*5*6*7=5040,答案就是1,不是2。

【輸入格式】

一行兩個正整數,分別表示a和b(1

<=a,b<=10^6)。

【輸出格式】

輸出一行乙個整數,即0的個數。

【輸入輸出樣例1】

lxl.in lxl.out110

2【輸入輸出樣例2】

lxl.in lxl.out425

6【資料範圍】

1<=a,b<=1000

000

那我們先從這道題入手。

首先審題,非常重要。

主要講的是:

a a

到b' role="presentation" style="position: relative;">b

b的乘積,末尾有幾個

0 0

那末尾0' role="presentation" style="position: relative;">0

0怎麼產生的呢?

2 2

× 5' role="presentation" style="position: relative;">55=

=

10' role="presentation" style="position: relative;">1010

也就是說,找

2 2

和5' role="presentation" style="position: relative;">5

5的個數,然後比較誰少,就是答案。

忘了告訴大家這道題有個坑,

a a

不一定比

b' role="presentation" style="position: relative;">b

b小,交換一下就可以了。

#include//呼叫      scanf      庫

long

long a,b,t,x,y,s1=0,s2=0;//競賽最好開 long long ,避免資料太大的情況

int main()//主函式

//算出2和5的個數

if(s1printf("%lld",s1);

else

printf("%lld",s2);

//輸出小的

return

0;}

回歸正題,題目類似

不過洛谷上是n!

n

!,就沒有剛剛的坑點了。

其實,剛剛有個優化,直接判斷

10 10

。因為,2

2

和5' role="presentation" style="position: relative;">5

5才得到

10 10

,那個少乙個都不行,所以自然得出少的個數。

#include//呼叫      scanf      庫

#define ll long long//long long 可開可不開,不過小菜雞喜歡

ll n,ans=1;//ans 做累乘

int main()//美好的開始

printf("%lld",ans%10);//注意最後要%10,想了大約半個小時

return

0;//下次再見

}

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