1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| 思路: 相当于将26进制的数字转化为十进制 注意 起始下标为1
代码: /** * @param String $columnTitle * * @return Integer */ function titleToNumber($columnTitle) { $count = strlen($columnTitle); $nums = 0; for ($i = 0; $i < $count; $i++) { // 每个字母和字母A的差值为实际的十进制数字,由于下标是以1开始的,所以要加上1 $d = ord($columnTitle[$i]) - ord('A') + 1; // 需要乘位数-1次数的26,和二进制数转十进制的算法一致 for ($j = 0; $j < $count - $i - 1; $j++) { $d *= 26; } $nums += $d; }
return $nums; }
同理可得二进制转十进制算法 function titleToNumber($columnTitle) { $count = strlen($columnTitle); $nums = 0; for ($i = 0; $i < $count; $i++) { $d = $columnTitle[$i]; for ($j = 0; $j < $count - $i - 1; $j++) { $d *= 2; } $nums += $d; }
return $nums; }
|