题目

题解

和171相反的一个题嘛,这个稍微难一点。
这道题就是十进制转26进制,但是有一些需要注意的问题

  • 首先不能从前往后插入数字,即先放最大位,我起初是按照这个思路做的,但是没成功,因为其循环的终止条件不好设置,若每次取余最终会留下一个余数,还需要再处理一次;而且需要在每次除完之后减1,反正很复杂不好理解,写不出。
  • 其次要注意每次计算n要先减去1再取余,因为这个题其实不是严格的进制转换。是从1开始的进制转换,因此计算时要先减去1再取余,这个好理解一点。
class Solution {
public:
    string convertToTitle(int n) {
        string res;
        if(n==0) return res;
        while(n){
            res.push_back(--n%26+'A');
            n /= 26;
        }
        reverse(res.begin(),res.end());
        return res;
    }
};