求和一个非常大的数字的数字

时间:2016-04-27 00:24:25

标签: python arrays haskell largenumber

我想总结馅饼的前100.000位数字(我有文字和数字), 但我想以特定的形式做到这一点。

我想把数字放在一个矩阵(或任何方便的占位符)中,用我预定义的少量单元格,并重叠这些单元格中的数字。

我的意思是这样的:假设我们有这个数字列表(31415926535)

并且假设我们有4个单元格j,j1,j2,j3

在第一次运行中j = 3,j1 = 1,j2 = 4,j3 = 1注意每个单元格已被分配了一个列表的编号,并且列表中剩余的数字是(5926535)所以我想重叠它们 j = 8(因为它的值为3,现在增加了5),j1 = 10(1 + 9),j2 = 6 j3 = 7

我希望为我所有的100k数字做到这一点

但我想在其上加上另一个转折

我想在x个循环次数之后打印结果(循环我的意思是一次运行就像在上面的例子中指定j,j1,j2,j3和3,1,4,1将是第一个循环)以及最后的结果。

我更喜欢简单的语言,如python或haskell

2 个答案:

答案 0 :(得分:1)

这将是Haskell中的完整实现

import Data.List.Split (chunksOf)
import Data.List
import Data.Char (digitToInt)

main :: IO ()
main = do digits <- map digitToInt <$> readFile "pifile.txt"
          let summator = foldl1' (zipWith (+)) . chunksOf 4
          print $ summator digits

我会在今天晚些时候用一些解释来更新这个。

更新@Comments

main = do digits <- map digitToInt <$> readFile "pifile.txt"
              let summator = scanl1' (zipWith (+)) . chunksOf 4
              mapM_ print $ take 100 $ summator digits

答案 1 :(得分:0)

bins = [0,0,0,0] # four bins
for i,n in itertools.izip(itertools.cycle([0,1,2,3]),my_digits):
    bins[i] += int(n)

我猜...有时打印它

bins = [0,0,0,0] # four bins
num_bins = 4
for i,n in enumerate(my_digits):
    bins[i%num_bins] += int(n)
    if i % 100: print( bins ) # every 100 items print