简体   繁体   English

找到由输入数字的数字形成的最大数字

[英]Find the biggest number formed by digits of input numer

I am trying to write a function that return the biggest number formed by the digits from an input integer number. 我试图写一个函数,返回由输入整数的数字形成的最大数字。 So if the input = 123584 output should be = 854321 因此,如果输入= 123584输出应为= 854321

My code is - 我的代码是 -

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)

and off-course the output is not as I want. 而且当然输出不是我想要的。 Please help. 请帮忙。 I am eager to learn all possible way to do it. 我渴望学习所有可行的方法。

The biggest number is formed by sorting the digits in descending order. 最大的数字是通过按降序排序数字形成的。 This can be achived using the rverse=True parameter to sorted() : 这可以使用rverse=True参数来实现sorted()

def max_digit_permutation(n):
    return int("".join(sorted(str(n), reverse=True)))
def maxNumber(inputNumber):
    return int(''.join(sorted(str(inputNumber), reverse=True)))

This is more reliable than most answers given so far ;-) 这比目前给出的大多数答案更可靠;-)

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)    

And good point - I missed the option of doing it with number alone - here it is for completeness. 好的一点 - 我错过了单独使用数字的选择 - 这是为了完整性。 :) :)

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) 

sort the string of number, reverse it, join it and convert to int 排序数字的字符串, reverse它, join它并转换为int

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

You could just treat the number as a list of single digits and then sort the list in decreasing order. 您可以将该数字视为单个数字列表,然后按降序对列表进行排序。

What about something like this: 这样的事情怎么样:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM