Excel 26机制转换

 

 

【问题描述】算法

在Excel中,列的名称是这样一个递增序列:A、B、C、…、Z、AA、AB、AC、…、AZ、BA、BB、BC、…、BZ、CA、…、ZZ、AAA、AAB…。
咱们须要将上述列名序列和如下天然数序列相互转换:一、二、三、…。设计

 

【问题分析】blog

通过分析,咱们不难发现,这是一个26进制和十进制相互转换的问题。序列A-Z依次对应序列1-26。进制转换的基本办法就是“取余法”,换算规则以下:
ABZ = 1*26² + 2 * 26¹ + 26*26°= 676 + 52 + 26 = 754
因而,咱们就知道该如何设计一个十进制转换为26进制的算法了。im

 

【算法描述】
Step1.[取余] 用指定天然数n除以26,获得一个余数m。若是m = 0,置m←26。
Step2.[转换为字符] 将m映射为字符c,映射规则是{1-26}->{A-Z}。而后将c拼接到26进制值s的左边,也就是置s←c + s。
Step3.[去余降幂] 置n←(n–m)/26。若是n > 0,则回到Step1继续执行,不然进入Step4。
Step4.[结束] 返回s。db

按照上述思想,26进制转换为十进制的过程正好是相反的,并且实现起来也更为简单,在此不述。img

相关文章
相关标签/搜索