首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不是数字的数字

不是数字的数字
EN

Stack Overflow用户
提问于 2013-01-22 21:34:55
回答 4查看 219关注 0票数 0

我想知道通过将用户输入的数字相乘可以得到的最大数字是多少: 5*6*7*2或者567*2或者67*25 ...etc所以用户应该输入5/6/7/2作为变量,但是我如何告诉python从两个变量组成一个数字(将两个数字放在一起,并将结果视为一个数字本身)。

EN

回答 4

Stack Overflow用户

发布于 2013-01-22 21:37:27

如何告诉python从两个变量组成一个数字(将两个数字放在一起,并将结果本身视为一个数字)

如果两位数存储在整型变量中,则可以使用以下命令:

代码语言:javascript
运行
复制
In [1]: v1 = 5

In [2]: v2 = 6

In [3]: v1 * 10 + v2
Out[3]: 56

这可以概括为一系列数字:

代码语言:javascript
运行
复制
In [7]: l = (1, 2, 6, 3)

In [8]: reduce(lambda x,y: x * 10 + y, l)
Out[8]: 1263
票数 2
EN

Stack Overflow用户

发布于 2013-01-22 22:08:26

so 5/6/7/2 should be entered by the user as variables, but how do I tell python to form a number from two variables (putting the two digits next to each other and treating the outcome as a number by itself).

您的问题的根源似乎是从用户捕获数据,对其进行组合和转换:

代码语言:javascript
运行
复制
>>> a = raw_input()
8
>>> b = raw_input()
3
>>> a
'8'
>>> b
'3'
>>> a + b
'83'
>>> int(a+b)
83

就这么简单。

biggest number you can make from multiplying digits entered而言..。如果你愿意,我们可以用数学证明这一点,这样你就没有一堆组合可以尝试了:

我们可以对>= b >= c >= d的数字进行排序

首先,让我们看一下如何拆分数字31。我们需要比较一下a * bcdb * acdc * abdd * abc

比较a * bcd = 100ab + 10ac + adb * acd = 100ab + 10bc + bd,我们看到前者更大,因为a >= b。类似的论据将表明a * bcd胜过其他公司。

同样,我们可以将ac * bd = 100ab + 10(ad+bc) + bdad * bc = 100ab + 10(ac+bd) + cd进行比较。我们宁愿有更多的大a副本,所以第二个就赢了。

最后,我们需要将a * bcd = 100ab + 10ac + adad * bc = 100ab + 10(ac+bd) + cd进行比较。第二个是赢家。

您可能将循环中的输入作为一个数组,所以如果您有:

代码语言:javascript
运行
复制
(a)  arr[0] = '5'                  arr[0] = '7'
(b)  arr[1] = '6'     sort em  =>  arr[1] = '6'
(c)  arr[2] = '7'                  arr[2] = '5'
(d)  arr[3] = '2'                  arr[3] = '2'

最大的是:

代码语言:javascript
运行
复制
int(arr[0] + arr[3]) * int(arr[1] + arr[2]) = 4680
票数 1
EN

Stack Overflow用户

发布于 2013-01-22 22:10:38

我觉得你的问题出错了。你要的是排列?真的吗?

如果是这样,请看@mbeckish的回答。它非常简单,在编程中也不是一个很好的练习。

(然而,这是一个很好的练习,可以用谜语般的“陷阱”来解决问题)

一种更好的方法是抛弃排列要求,这样输入的顺序实际上可以影响答案。对于这种方法,我们得到了一个更有趣的解决方案:

代码语言:javascript
运行
复制
def largest_product(*args):
    numbers = ''.join(map(str, args))
    results = []
    for i in range(1, len(numbers) - 1):
        multicand  = int(numbers[:i])
        multiplier = int(numbers[i:])
        m, n = multicand, multiplier
        results.append(( m * n, "%s * %s" % (m, n)))
    return max(results)

>>> largest_product(*range(8))
(827115, '12345 * 67')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14459821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档