题目解析
本题可以分为两部分逻辑:
- 输入校验
- N进制减法
对于输入校验,需要满足以下几点,否则非法:
- 2 ≤ N ≤ 35
- 被减数和减数如果不是 0,那么不能含有前导 0
- 被减数和减数都是 N 进制数,其各位上的值必须小于 N
其中第1,2两点比较容易验证,而对于第3点,本题说:N进制数的有效的字符包括 0-9 以及小写字母 a-z。
此时,小写字母 a-z 对应数值 10~35,即 'a' -> 10,'b' -> 11, ...,'z' -> 35。
因此,我们需要注意处理小写字母。
关于 N 进制减法的实现,有两种思路:
思路一:将N进制转化为十进制,然后进行十进制减法,最后差值再转为N进制
这种思路很简单,也能基于编程语言内置的进制转换函数(实现上简答),但是本题N进制数的数量级很大,题目描述说:字符串有效字符个数最大为 100 个字符
因此,N进制可能会转化出一个极大的十进制数,可能会超出long范围,因此这种思路是有缺陷的。