这个整数编码如何工作?

时间:2010-07-14 19:11:17

标签: language-agnostic encoding biginteger mathematical-optimization

this code golf question中,有一个python answer,它将英语中所有整数的长度从1到99编码为一个大数字:

7886778663788677866389978897746775667552677566755267756675527886778663788677866355644553301220112001

要获得n的长度,您只需计算3 + (the_big_number / (10**n)) % 10。这是如何工作的?

2 个答案:

答案 0 :(得分:4)

(the_big_number / (10^n)) % 10拉出大数字的n个最低位数,所以长度只是从最右边的“零”(1 + 3 = 4)长度开始存储,并在最左边跟随“九十九”(7 + 3 = 10)的长度。

最短的英文数字是三个字母(“一个”,“两个”,“六个”,“十个”),因此每个长度都存储有三个偏移量。 100之前最长的是9 + 3 = 12个字母(例如“七十八”),因此每个数字可以存储为一个数字。

答案 1 :(得分:2)

从右边开始:

  • 第一个数字是“零”减去3
  • 的字母数
  • 第二个数字是“one”中有多少个字母,减去3
  • 第三位......
  • ... 100 th 数字是“九十九”减三的字母数。

请注意,最长的数字“七十七”只有12个字母,在减去3之后可以方便地输入一个数字。