結尾非零數的奇偶性Python

2021-10-09 03:26:35 字數 1303 閱讀 9185

題目描述

給你乙個正整數列表 l, 判斷列表內所有數字乘積的最後乙個非零數字的奇偶性。如果為奇數輸出1,偶數則輸出0.。

例如:l=[2,8,3,50]

則輸出:0

思路

最簡單的方法就是累乘,最後根據結果判斷非零數的奇偶性。但是這樣和結尾0的個數該題犯了一樣的記憶體錯誤。其實可以和這道題一樣,發現問題的本質。乙個數是由許多個因子相乘而來,那麼所有的數都可以分解成若干個不能再分解的因子,也就是奇數和偶數(更具體的說是質數相乘)。比如10可以分成1*10,但是10又可以繼續再分,所以最終是2*5.比如5就是5。(感覺有點類似於短除法)。

在換句話說,乙個數的奇偶性由什麼決定呢?就是取決於這個數的因子中2的個數。而問題中要求的是結尾非零數的奇偶性,那麼如果這個數結尾有0,直接去掉就可以,那麼因為不能求解這個數,如果去掉結尾的0呢?和結尾0的個數這道題一樣,10是由2*5組成,只需要去掉每一對2和5就可以。然後在考慮其他的因子。(其實其他的因子也不用考慮了 ,質數中只有2是偶數,其他的都是奇數,這樣,有2乘積才能是偶數,沒有2,乘積必定是奇數)

因為需要去掉結尾0數,所以求解2和5的個數,這樣,只需要比較2和5的個數就可以了(也就是最終能夠去掉多少個2,判斷剩餘的2能否使乘積為偶數)。

最後,如果去掉後還有2(也就是2的個數比5多),那麼不用說,結尾非零數必定是偶數;

如果去掉後沒有2也沒有5(也就是2和5的個數一樣),那麼這種情況下呢?我這裡其實是猜的,是奇數(因為如果是偶數,必定能分解出來乙個2,沒有偶數2,乙個數必定是奇數)

如果去掉之後沒有2,但有5(也就是5的個數比2多),這種情況就不用說了,一定是奇數。

# 這裡單獨給出乙個列表l

l=[2,8,3,50]

def solve_it():

num_t = 0

num_f = 0

for i in l:

while true:

if i % 2 == 0:

num_t += 1

i = i // 2

elif i % 5 == 0:

num_f += 1

i = i // 5

else:

break

if num_t <= num_f:

result = 1

else:

result = 0

return result

print(solve_it())

結尾非零數的奇偶性

描述 給你乙個正整數列表 l,如 l 2,8,3,50 判斷列表內所有數字乘積的最後乙個非零數字的奇偶性,奇數輸出1,偶數輸出0.如樣例輸出應為0 coding utf 8 l 2,8,3,50 product 1 for i in l product i def main global produ...

N!的最末位非零數

n!的最末位非零數 原帖 給定乙個數n n 10 1000 如何快速求得n!的最末位非零數是乙個經典的問題。一直以來都被這個問題困擾,今天仔細想了下,終於給想通了,儘管可能有些笨拙,現把想法記錄於此。在n很小的情況下,有乙個簡便的方法 求出1到n之間每個數的2的因子數和5的因子數,記為f 2 和f ...

TOJ1011 階乘末尾非零數求和

階乘末尾非零數求和 對於小於25000的自然數n,求階乘n n 1 n 2 3 2 1 右邊的非零數之和。例如 當n 5時,5 120,右邊非零數為2 4 24,右邊非零數為4 3 6,右邊非零數為6 2 2,右邊非零數為2 1 1,右邊非零數為1。其右邊的非零數之和為15。本題有多組資料,每組資料...