对一个非常大的数的数字求和
Summing the digits of a very large number
我想对饼图的前 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
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
这将是 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
我想对饼图的前 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
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
这将是 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