2012-07-03 30 views
4

我想寫一個函數,返回由輸入整數數字形成的最大數字。 因此,如果輸入= 123584 輸出應該= 854321找到由輸入數字的數字形成的最大數字

我的代碼 -

def maxNumber(inputNumber): 
    x = len(str(inputNumber)) 
    max_number = [] 
    result= [] 
    while(x>0): 
     max_number.append(inputNumber%10) 
     inputNumber = inputNumber/10 
     x -= 1 
    while(x<(len(str(max_number)))): 
     result.append(max(max_number)) 
     x += 1 
    return result 

print maxNumber(1238675) 

和場外的輸出是不是我想要的。請幫忙。我渴望學習所有可能的方式來做到這一點。

+0

這不是功課,不過沒關係,我學到了一些新東西 – Varun

+0

呃......答案只有一個處理負數;-) –

+2

這可能是實現這個用純算術一個有趣的挑戰,沒有字符串功能。任何人? – georg

回答

4

這比更可靠:這可以通過使用rverse=True參數sorted()被achived迄今給出的大多數答案;-)

def max_number(n): 
    s = str(n) 
    digits = sorted(s, reverse=n>0) 
    return int(''.join(digits)) 

print max_number(231)  
print max_number(-231)  
print max_number(+231)  

好點 - 我錯過了單獨使用數字的選項 - 這裏是爲了完整性。 :)

from math import * 

def max_number(n): 
    digit_count = int(log(abs(n+1),10)) + 1 
    digits = sorted([(n/10 ** (x - 1) % 10) for x in range(digit_count,0,-1) ], reverse=True) 
    return reduce(lambda x, y:10*x + y, digits) 

print max_number(1000) 
print max_number(999) 
print max_number(2345128) 
print max_number(231) 
+0

謝謝,我正在處理一個可以處理花車現在。 – Varun

+0

有兩個大問題:首先,浮點數基本*不是*十進制數;第二,你總是希望把小數點放在所有數字後面,所以它甚至不是一個有趣的問題。 –

+0

大數字只能由問題中的數字組成。該標誌不應包括在內。 –

1

您可以將數字視爲單個數字的列表,然後按降序對列表進行排序。

什麼是這樣的:

num = str(123584) 
int(''.join(sorted(num, reverse=True))) 
7

最大數由排序降序排列的數字形成。

def max_digit_permutation(n): 
    return int("".join(sorted(str(n), reverse=True))) 
+0

這就是爲什麼我學習Python作爲我的第一語言..它告訴你很多和非常簡潔的方式 – Varun

7
def maxNumber(inputNumber): 
    return int(''.join(sorted(str(inputNumber), reverse=True))) 
2

排序數字的字符串,reverse它,join它並轉換爲int

>>> x=123584 
>>> int(''.join(sorted(str(x))[::-1])) 
854321 
+0

'[:: - 1]'可以討厭的內存,如果數量是_huge_ –

+0

哦,哇,這很容易,我沒有得到它..時間更加努力:) – Varun

+3

@Varun說實話這種有線的東西來自很好的瞭解語言,它往往更好地學習漫長的道路。 –