进制闲谈
今天在做一个人员编号:A B C D ... Z AA AB AC AD. 即编号从A-Z然后AA~AZ,增加到BA~...ZZ。大概思路:ASCII十进制的65-90为A-Z,大于90加左边的字符,如91=>'AA'。
一开始没了解到这是个进制,做了半天改来改去发现改好的样子很熟悉,跑数据时候才发觉是进制:
prev_code=parseInt((nickname_code-91)/26+65);
next_code=(nickname_code-91)%26+65;
这不就是逢26(Z)进1(A)么,26进制。之前没好好考虑,脑子被吃了。 存储之后再次编辑需要处理:从AA->91,BZ->142。既然知道是进制,就很简单了。
$code1=ord($char[0]); $code2=ord($char[1]); $code=($code1-64)*26+$code2;//乘基数26
'BZ'代入进去,(66-64)*26+90=142。Ok.