5

入力整数から数字で形成された最大数を返す関数を作成しようとしています。したがって、入力 = 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)

もちろん、出力は私が望むものではありません。助けてください。私はそれを行うために可能なすべての方法を学びたいと思っています。

4

5 に答える 5

8
def maxNumber(inputNumber):
    return int(''.join(sorted(str(inputNumber), reverse=True)))
于 2012-07-03T16:54:57.917 に答える
7

最大数は、数字を降順にソートすることによって形成されます。これは、rverse=Trueパラメーター toを使用して実現できsorted()ます。

def max_digit_permutation(n):
    return int("".join(sorted(str(n), reverse=True)))
于 2012-07-03T16:54:25.840 に答える
5

これは、これまでに与えられたほとんどの回答よりも信頼性が高いです;-)

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) 
于 2012-07-03T17:00:44.187 に答える
2

number、 reverseit、 it の文字列を並べ替えjoinて、次のように変換しますint

>>> x=123584
>>> int(''.join(sorted(str(x))[::-1]))
854321
于 2012-07-03T16:55:26.093 に答える
1

数値を 1 桁のリストとして扱い、リストを降順で並べ替えることができます。

このようなものはどうですか:

num = str(123584)
int(''.join(sorted(num, reverse=True)))
于 2012-07-03T16:54:10.930 に答える