我有一个大数字可以说大约一百位数。我想将这个大数字子集成为连续的5位数,并找到这5位数的乘积。例如,我的前5位数字是73167.我需要检查73167中各个数字的乘积,依此类推。
样本编号如下:
73167176531330624919225119674426574742355349194934969835203127745063262395783180169848018694788518438586156078911294949545950173795833195285320880551112540698747158523863050715693290963295227443043557
我有一个问题是将大数字中的小数字分组。
我的基本起始代码是:
b = 73167176531330624919225119674426574742355349194934969835203127745063262395783180169848018694788518438586156078911294949545950173795833195285320880551112540698747158523863050715693290963295227443043557
jd = str(b)
for ch in jd:
number = ch
print (number)
非常感谢任何帮助。
答案 0 :(得分: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))
答案 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)