Pi被截断为41个十进制数字(40个位)3.1415926535897932384626433832795028841971
。
如果忽略小数点并将数字列为正整数序列(避免重复),则会得到3 1 4 15 9 2 6 5 35 8 97 93 23 84 62 64 33 83 27 950 28 841 971
(OEIS A064809)。
(注意,15
该序列出现在序列中,而不是1 5
因为1
已经发生。
请注意,0
因为它不是正数,所以不会发生;950
包含第一个零。)
为了构造第一个归零数,我们使用此序列索引Pi的数字(第一个数字为3,第二个为1,依此类推)。
因此,第一个编号的第一位是Pi的第三位,
第二位是Pi的第一位,
第三位是Pi的第四位,第四位是Pi
的第十五位,
依此类推。
在第一个数字后添加小数点以模仿Pi。
因此,第一个第41位数字是 4.3195195867462520687356193644029372991880
。
(请注意,对于第30位,我必须一直到Pi的第974位。)
为了构造第二个序数,使用第一个序数而不是Pi来重复该过程。(Pi本身可以称为零归零数。)因此,新序列为4 3 1 9 5 19 58 ...
,第一个海盗数被索引以产生第二个,然后开始9.14858...
。
以相同的方式创建更多的打折号,每个打折号都是从之前的打折号生成的。
挑战
您的任务是编写可能的最短程序,该程序采用两个整数N
和D
,并输出N
截断为D
十进制数字数字。
D
始终为正但N
为非负,且D
Pi的数字应在N
为0
时输出。D
为1时,小数点是否存在无关紧要。
输入应来自stdin或命令行,输出应进入stdout(或您的语言的最接近替代品)。
您的程序应适用于2 16N
或D
以下的所有输入值,但不必及时或有效。
以字节为单位的最短代码获胜。
(请注意,折数在其他基准中存在,但此挑战中的所有操作均在基准10中完成。)
N=1
,D=13393
对于您来说,您需要PI的第31百万位