Find the largest number formed by the digits of the input number

I am trying to write a function that returns the largest number formed by digits from an input integer. Therefore, if input = 123584, output must be = 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 outside the course, the conclusion is not what I want. Please help. I really want to know all the possible ways to do this.

+4
source share
5 answers

This is more reliable than most of the answers so far given; -)

 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 a good point - I missed the option of doing this with number one - 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) 
+4
source

The largest number is formed by sorting the numbers in descending order. This can be achieved using the rverse=True parameter to sorted() :

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

sort a string of numbers, reverse it, join it and convert to int

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

You can simply treat the number as a list of individual digits, and then sort the list in descending order.

Something like that:

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

All Articles