2016-11-16 40 views
2

說我的輸入是39 - 我想正確循環通過這個數字的部分,直到最終產品是一個數字(3 * 9 = 27, 2 * 7 = 14,1 * 4 = 4),並返回作爲輸出的次數乘以,在這個例子中,這將是3.如何計算整數乘以部分的次數以減少到單個數字

我對循環的基本理解讓我到第1步,使用上面的例子設法返回27

def times_multiplied(n): 
    total = 1 
    for i in map(int, str(n)): 
     total *= i 
    return total 

另一種認爲我有減少的數量,沒有找到計數只是還沒有,是要增加額外的for循環,但我的直覺說,這是太多的代碼。我確信Python提供了一個更簡單,更優雅的解決方案......

最後,當然是捕獲乘以次數的方法,我的直覺也可能與Counter有關。我並不積極。

請幫忙!

+1

順便說一句,這就是所謂的(HTTP [數字的乘法持久]://mathworld.wolfram .com/MultiplicativePersistence.html).OEIS條目是[A031346](https://oeis.org/A031346),順便提供了一個類似於@ GReaperEx答案的Python函數示例。不幸的是,似乎並沒有一個直接的公式,所以這就好像你會得到。 –

回答

2

您應該將times_multiplied重命名爲multiply_digits,因爲這就是它的作用。然後通過循環創建真實的times_multiplied,直到結果少於10。這裏有一個可能的解決方案,如果我還記得我的Python:

def multiply_digits(n): 
    total = 1 
    for i in map(int, str(n)): 
     total *= i 
    return total 

def times_multiplied(n): 
    count = 0 
    result = n 
    while result >= 10: 
     count += 1 
     result = multiply_digits(result) 
    return count 

在一個單一的功能:

def times_multiplied(n): 
    count = 0 
    result = n 
    while result >= 10: 
     count += 1 
     total = 1 
     for i in map(int, str(result)): 
      total *= i 
     result = total 
    return count 
+0

是如何工作的(下一個功能): –

+0

DEF的持久性(N): 總= 1 對於i在地圖(INT,STR(n))的: 總* = I 返回總 計數= 0 結果= N 而真: 計數+ = 1 結果=持久性(結果) 如果結果<10:把所有這一切在一個單一的功能 斷裂 返回計 –

+0

會是麻煩的。你確定要這樣做嗎? – GReaperEx

相關問題