2012-07-03 10 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

Это более надежно, чем большинство полученных ответов до настоящего времени ;-)

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

Наибольшее число образуется путем сортировки цифр в порядке убывания. Это может быть achived с помощью rverse=True параметра sorted():

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, честно говоря, этот вид одной линии происходит от знания языка очень хорошо, его часто лучше сначала изучить длинный путь. –

Смежные вопросы