2014-09-23 78 views
-4

我想写一个显示PI号码的10000位数的程序,很简单,呵呵?那么,有一个问题,该文件被限制为5000字节。我试图做一些事情,比如将“11”改为a来缩短代码,但是它大约是9000,这对我来说太过分了。任何想法或提示?而且我无法使用任何其他库或函数在线或从文件下载PI编号。只是iostream。PI号码到10000位

+2

你可以使用各种方法来压缩数字,但是你不会真正在“显示10000位数字的PI”。目前还不清楚你实际需要做什么。 – interjay 2014-09-23 16:37:21

+0

闻起来像功课,任务是我想弄清楚一些至少非常基本的压缩。 4位足以编码小数位1位。 – Andrey 2014-09-23 16:38:00

+0

你有什么代码? – DavidT 2014-09-23 16:38:02

回答

1

可以使用高4位和低4位将两个数字打包到一个字节中。例如,对于3.141 ....将14包装成一个字节00010100(0001 == 1,0100 == 4)。这样你的10,000个数字将占用5000个字节。

当您读取文件时,只需打印3.后跟解包数据即可。

+0

您可以将8编码为10和9编码为11,以节省一些额外的空间。 – Andrey 2014-09-23 16:56:45

0

这是pi的前10,000个数字:http://www.nerdparadise.com/math/reference/pi10000/

这些由数字下断裂是:

0: 968 
1: 1026 
2: 1021 
3: 974 
4: 1012 
5: 1046 
6: 1021 
7: 970 
8: 948 
9: 1014 

这意味着该最小编码是:

000: 5 
001: 1 
010: 2 
011: 6 
100: 9 
101: 4 
1100: 3 
1101: 7 
1110: 0 
1111: 8 

共有4232.5字节的打包数据。

我将离开实施解码器作为练习给读者。

另见本的YouTube视频,获取有关如何创建最小编码的解释:

https://www.youtube.com/watch?v=M5c_RFKVkko

0

现在看来似乎会更容易只是为了产生PI而不是通过压缩PI本身的程序。这是通过诸如Gregory-Leibniz或Nilakantha系列等系列完成的。有关他们如何工作的文章可以在here找到。这些程序可以很容易地用几乎任何语言书写。

希望这会有所帮助。