题目数据范围是1到16384, 而最大的二位是ZZ即702,最大的三位是ZZZ即18278,那么n对应的字母最多只有3位。
用一个三位的字符串来接收即可。那么怎么把数值转成字符类型,先得定义字符类型,然后用该数字减1再加上’A'即为该字符的ASCII码,用字符类型表示出来就是大写字母了。
刚开始循环用的是while(n>0)和 res[i] = n % 26 -1 + 'A',报错了,问题在于676和17576这两个数一个是26的平方,一个是26的立方,取余为0啊,0-1+‘A'打出来是@,
看别人才知道用while(n-->0)和res[i] = n % 26 + 'A'
char* ExcelTitle(int n ) { char *res = malloc(sizeof(char) * 3); int i = 2; while(n-->0){ res[i] = n % 26 + 'A'; i--; n = n / 26; } return &res[i+1]; }