我意识到这个问题有点老了,但我最近正在解决这个问题。问题的核心是模棱两可。MIX 单词的打印表示不明确。
根据 Knuth 的说法,一个字节必须包含至少 64 个值 (0..63) 并且不超过 100 (0..99) 个值。通过仔细阅读规范,其他一些答案将是无效的。(第 125 页 TAOCP 第 1 卷)
让我们在二进制和十进制解释中解决这个问题。首先显式转换 MIX 字,然后以熟悉的十进制模式执行算术运算。最后,答案被转换回 MIX 表示。
BINARY MODE REALITY
1234 0 0 9 = [(1234 * 64^3) + (0 * 64*2) + (0 * 64) + 9] = 323485705
2000 150 0 = [(2000 * 64*3) + (150 * 64) + 0] = 524297600
-323485705 - -524297600 = 200811895
答案的 MIX 字二进制表示为:
200811895 = [(766 * 64^3) + (149 * 64) + 55] = 766 149 55
现在进行十进制解释:
DECIMAL MODE REALITY
1234 0 0 9 = [(1234 * 10^3) + (0 * 10^2) + (0*10) + 9] = 1234009
2000 150 0 = [(2000 * 10^3) + (150 * 10) + 0] = 2001500
-1234009 - -2001500 = 767 491
MIX 字十进制表示为:
767491 = [(766 * 10^3) + (149 * 10) + 1] = 766 149 1
请注意,打印的表示是模棱两可的。eg1234 0 0 9
可以同时表示323485705
或1234009
。根据您对单词的阅读(二进制或十进制模式),您正在解决两个不同的问题和两个独特的答案。
下表将总结并希望使事情变得清晰。
MIX Binary Decimal
rA -1234 0 0 9 -323485705 -1234009
SUB -2000 150 0 - -524297600 - -2001500
----------- ---------- --------
766 149 ? 200811895 767491 NOTE: 2 different answers!
鉴于打印的答案是 766 149 ?我们可以解决吗?价值。
766 149 0 200811840 767490
? 55 1
MIX 词的表示足够模糊,无需在字段中打包;这很容易出错。字段打包不相关,因为操作将整个单词作为一个单元进行。将操作结果表示为字段打包字节是另一层抽象。