我想知道用户输入的数字乘以这样的最大数字是这样的: 5 * 6 * 7 * 2或567 * 2或67 * 25 ......等 因此5/6/7/2应该由用户输入为变量,但是如何告诉python从两个变量形成一个数字(将两个数字放在一起并将结果单独作为数字处理)。
答案 0 :(得分:2)
如何告诉python从两个变量中形成一个数字(将两个数字放在一起并将结果作为一个数字单独处理)
如果两位数存储在整数变量中,则执行以下操作:
In [1]: v1 = 5
In [2]: v2 = 6
In [3]: v1 * 10 + v2
Out[3]: 56
这可以推广到一系列数字:
In [7]: l = (1, 2, 6, 3)
In [8]: reduce(lambda x,y: x * 10 + y, l)
Out[8]: 1263
答案 1 :(得分:1)
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).
似乎问题的根源是从用户捕获数据,组合并转换它:
>>> 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
而言...我们可以证明,如果你愿意,可以用数学来尝试:
我们可以对数字a
> = b
> = c
> = d
首先让我们看一下分割数字3
和1
。我们需要比较a * bcd
,b * acd
,c * abd
,d * abc
。
将a * bcd = 100ab + 10ac + ad
与b * acd = 100ab + 10bc + bd
进行比较,我们发现前者较大,因为a
> = b
。类似的论点将表明a * bcd
胜过其他人。
同样,我们可以将ac * bd = 100ab + 10(ad+bc) + bd
与ad * bc = 100ab + 10(ac+bd) + cd
进行比较。我们宁愿拥有更多的大a
副本,所以第二个获胜。
最后,我们需要将a * bcd = 100ab + 10ac + ad
与ad * bc = 100ab + 10(ac+bd) + cd
进行比较。第二个是胜利者。
你可能把循环中的输入作为一个数组,所以如果你有:
(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'
最大的将是:
int(arr[0] + arr[3]) * int(arr[1] + arr[2]) = 4680
答案 2 :(得分:1)
我觉得你在你的问题中发了一个错误。你要求排列吗?你确定吗?
如果有,请参阅@mbeckish的回答。这很简单,而且编程也不是很好。
然而,(对于解决方案来说,这是一个很好的练习谜语问题的技巧问题)更好的方法是抛弃排列要求,以便输入的顺序实际上可以影响答案。对于这种方法,我们得到了一个更有趣的解决方案:
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')
答案 3 :(得分:1)
任何让你尝试所有数字排列的解决方案都会非常低效,在O(n!)中运行。只需14位数(和乘法运算符)就可以得到大约1万亿个组合!
O(n lg n)解决方案是:
<击> 如果必须乘以至少一位数,则
如果必须乘以至少一位数,那么您可能需要尝试所有排列(请参阅@ Mike的回答)。
答案 4 :(得分:0)
我假设您将数字作为字符串,因此您可以简单地删除它们,加入并转换为int:
string = "5*6*7*2"
value = int( "".join(string.split('*')) )
# value == 5672