1 algorithm computer-science radix
假设您有一个包含千兆字节的文件
deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
Run Code Online (Sandbox Code Playgroud)
并且你想将它转换为十进制,就像你将0xdeadbeef转换为3,735,928,559一样.
数字可被2整除的基数很容易实现,因为您可以每隔几位操作并输出一个数字(6为base64).
有什么办法用十进制做到这一点?
编辑:该文件代表一个长号.它重复的事实与数字5555,055,055没有什么不同.
EDIT2:文件大小已知.然后怎样呢?
您通常可以在阅读输入之前开始写作.但是如果数字非常接近10的幂,你可能必须读取超过一半的输入才能写出输出的第一个数字!
要了解原因,请举一个相对较小的例子.假设数字是10 60.十六进制编码为50个十六进制数字.读完前34位后,你知道的很多:
9f4f2726179a224501d762422c946590d9................
Run Code Online (Sandbox Code Playgroud)
圆点是您尚未阅读的数字.
此时,您仍然无法写入输出的第一个数字,因为输入可以是任何内容
9f4f2726179a224501d762422c946590d90000000000000000
Run Code Online (Sandbox Code Playgroud)
至
9f4f2726179a224501d762422c946590d9ffffffffffffffff
Run Code Online (Sandbox Code Playgroud)
而前者是十进制999999999999999999999999999999999999999998847078495393153024,但后者是1000000000000000000000000000000000000000017293822569102704639.所以你还是不知道是写1还是9!直到第35个输入数字才能开始写输出.
通常,在最坏的情况下,在写入第一个输出数字之前,您必须读取大约四分之三的输入.