使用python将较大的数字子集化为较小的数字序列

时间:2013-04-18 08:39:55

标签: python

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

样本编号如下:

73167176531330624919225119674426574742355349194934969835203127745063262395783180169848018694788518438586156078911294949545950173795833195285320880551112540698747158523863050715693290963295227443043557

我有一个问题是将大数字中的小数字分组。

我的基本起始代码是:

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

非常感谢任何帮助。

6 个答案:

答案 0 :(得分:4)

编辑:我认为grouper在此解决方案中有点过分,请查看@Haidro的解决方案https://stackoverflow.com/a/16078696/1219006


使用itertools

中的grouper食谱

我假设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))

答案 1 :(得分: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))

答案 2 :(得分:2)

给你一行:

import re; re.findall("\d{5}", number)             

答案 3 :(得分: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]

答案 4 :(得分:1)

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

答案 5 :(得分: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)