一、题目描述
36进制由0-9,a-z,共36个字符表示
不允许把36进制数字整体转为10进制数字,计算出10进制数字的相加结果再转回为36进制
示例 1:
'1b' 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47
要求按照加法规则计算出任意两个36进制正整数的和
如:按照加法规则,计算'1b' + '2x' = '48'
二、解题
字符串相加
这题可以参照415题。主要是将原来的10进制转为36进制。
public String add36Strings(String num1, String num2) {
int carry = 0;
int length1 = num1.length()-1, length2 = num2.length()-1;
StringBuffer res = new StringBuffer();
while(length1 >=0 || length2 >=0 || carry == 1) {
int x = length1 >= 0 ? getInt(num1.charAt(length1)) : 0;
int y = length2 >= 0 ? getInt(num2.charAt(length2)) : 0;
int temp = x + y + carry;
res.append(getChar(temp % 36));
carry = temp / 36;
length1-- ;
length2--;
}
return res.reverse().toString();
}
public char getChar(int n) {
if(n <= 9) {
return (char) (n + '0');
}else{
return (char) (n - 10 + 'a');
}
}
public int getInt(char ch) {
if('0' <= ch && ch <='9') {
return ch - '0';
}else{
return ch - 'a' + 10;
}
}