1

这个代码高尔夫问题中,有一个python 答案,它将英语中从 1 到 99 的所有整数的长度编码为一个大数字:

7886778663788677866389978897746775667552677566755267756675527886778663788677866355644553301220112001

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

4

2 回答 2

4

(the_big_number / (10^n)) % 10拉出大数的n第 th 最低有效数字,因此长度只是从最右边的“零”(1 + 3 = 4)的长度开始存储,然后是“九十九”的长度(7+3=10) 在最左边。

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

于 2010-07-14T19:17:25.997 回答
2

从右边开始:

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

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

于 2010-07-14T19:17:54.823 回答