找出由输入数字中的数字组成的最大数字

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)

当然,输出结果并不是我想要的。请帮忙解决。我渴望学习所有可能的方法来实现它。


这不是作业,但没关系,我学到了一些新东西。 - Varun
嗯...只有一个答案处理负数;-) - Maria Zverina
2
使用纯算术实现这个功能可能是一个有趣的挑战,不使用字符串函数。有人愿意尝试吗? - georg
@thg435 很好的观点!!我怎么会错过那个挑战呢。请看下面 :) - Maria Zverina
5个回答

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

7

最大的数字由按降序排列的数字组成。这可以通过将sorted()函数的参数rverse=True来实现:

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

这就是为什么我选择 Python 作为我的第一门编程语言的原因。它能够以非常简洁的方式教授很多知识。 - Varun

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) 

有两个很大的问题:首先,浮点数基本上不是十进制数;其次,您始终希望在所有数字之后将小数点放在末尾,因此这甚至不是一个有趣的问题。 - Karl Knechtel
大数应该只由题目中写的数字组成,符号不应包括在内。 - Marco de Wit

2

排序数字字符串,反转它,连接它并转换为整数

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

如果数字非常大,[::-1] 可能会对内存造成严重影响。 - Jakob Bowyer
哇,太棒了,这很容易,但我还不明白...是时候加把劲了 :) - Varun
3
老实说,这种简短的语言表达通常是通过对语言的深入了解得来的,学习时通常最好从基础开始。 - Jakob Bowyer

1

您可以将数字视为单个数字列表,然后按递减顺序对列表进行排序。

这样的话怎么样:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接