0

我有一个很大的数字,可以说大约一百位数。我想将那个大数字子集为 5 位数字的连续数字,并找到这 5 位数字的乘积。例如,我的前 5 位数字是 73167。我需要检查 73167 中各个数字的乘积,依此类推。

样品编号如下:

73167176531330624919225119674426574742355349194934969835203127745063262395783180169848018694788518438586156078911294949545950173795833195285320880551112540698747158523863050715693290963295227443043557

我有一个问题,从大数字中取出小数字。

我的基本起始代码是:

b = 73167176531330624919225119674426574742355349194934969835203127745063262395783180169848018694788518438586156078911294949545950173795833195285320880551112540698747158523863050715693290963295227443043557
jd = str(b)
for ch in jd:
    number = ch
    print (number)

非常感谢任何帮助。

4

6 回答 6

4

编辑: 我认为这grouper在这个解决方案中是矫枉过正的,看看@Haidro https://stackoverflow.com/a/16078696/1219006的解决方案


使用来自的石斑鱼食谱itertools

我假设b是一个字符串开头,因为将一个数字弄得那么大将是一种疯狂的内存浪费。

from itertools import izip_longest
from operator import mul

def grouper(n, iterable, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

for g in grouper(5, b, fillvalue=''):
    # And to work out the product of the digits
    num = ''.join(g)
    prod = reduce(mul, map(int, num))
于 2013-04-18T08:43:07.907 回答
3

尝试这个:

from operator import mul
def chunker(seq, size):
    return (seq[pos:pos + size] for pos in xrange(0, len(seq), size))
for i in chunker(str(myint),5): # Where myint is that big number
    reduce(mul, map(int, i))
于 2013-04-18T09:04:53.173 回答
2

一行给你:

import re; re.findall("\d{5}", number)             
于 2013-04-18T08:42:43.217 回答
2

我的看法:

import re
from operator import mul

print [reduce(mul, map(int, group)) for group in re.findall(r'\d{5}', str(b))]
# [882, 630, 0, 648, 20, 6048, 1680, 840, 540, 3888, 11664, 0, 1960, 0, 1890, 0, 1728, 0, 16128, 480, 1920, 0, 162, 6480, 0, 1323, 360, 3600, 0, 0, 0, 12096, 1400, 864, 0, 1620, 0, 360, 0, 2100]
于 2013-04-18T09:24:23.747 回答
1

第一个选项是您可以将此数字转换为字符串类型,进行文本处理并转换回数字。第二个选项,您可以将此数字除以 10000 并保存小数部分,然后对数字的底部分重复此过程。

于 2013-04-18T08:42:12.590 回答
0

我想出了我自己的答案版本。它可能不像此处发布的其他代码那样简洁。

# Read values
b = 73167176531330624919225119674426574742355349194934969835203127745063262395783180169848018694788518438586156078911294949545950173795833195285320880551112540698747158523863050715693290963295227443043557
jd = str(b)
max = 0
for i in range(0,len(jd)):
    number = jd[i:i+3]
    if len(number)==3:
        product = int(str(number)[0])*int(str(number)[1])*int(str(number)[2])
        if product > max:
            max = product
        else:
            max = max

print (max)
于 2013-04-18T09:19:49.533 回答