public class Solution { /** * num1 num2 为两个三十六进制的数,计算相加结果 * @param num1 * @param num2 * @return */ public String add(String num1, String num2) { StringBuilder result = new StringBuilder(); int carry = 0; int len1 = num1.length() - 1; int len2 = num2.length() - 1; for(; len1>=0 && len2>=0; len1--, len2--) { carry = add(num1, num2, result, carry, len1, len2); } while(len1>=0) { carry = add(num1, num2, result, carry, len1, len2); len1--; } while(len2>=0) { carry = add(num1, num2, result, carry, len1, len2); len2--; } if(carry > 0) result.append(carry); System.out.println(result.toString()); return result.reverse().toString(); } private int add(String num1, String num2, StringBuilder result, int carry, int len1, int len2) { int n1 = 0, n2 = 0; if(len1 >= 0) { n1 = getNumByChar(num1.charAt(len1)); } if(len2 >= 0) { n2 = getNumByChar(num2.charAt(len2)); } int sum = n1 + n2 + carry; carry = sum / 36; result.append(getCharByNum(sum % 36)); return carry; } public char getCharByNum(int n) { if(n<10) { return (char)((int)‘0‘ + n); } else { return (char)((int)‘a‘ + (n-10)); } } public int getNumByChar(char c) { if(c>=0 && c<=9) { return c - ‘0‘; } else { return (c - ‘a‘) + 10; } } public static void main(String[] args) { System.out.println(new Solution().add("ab", "z")); } }