36进制加法

278 阅读1分钟

题目

image.png

思路

  • 字符串相加
  • toInt()toChar()辅助

代码

public class Add {
	public String add(String s1, String s2) {
		StringBuffer sb = new StringBuffer();
		int i = s1.length() - 1, j = s2.length() - 1;
		int carry = 0;
		while (i >= 0 || j >= 0 || carry != 0) {
			int num1 = i >= 0 ? toInt(s1.charAt(i)) : 0;
			int num2 = j >= 0 ? toInt(s2.charAt(j)) : 0;
			int sum = num1 + num2 + carry;
			carry = sum / 36;
			int cur = sum % 36;
			sb.append(toChar(cur));
			i--;
			j--;
		}
		return sb.reverse().toString();
	}
	//36进制字符(1~9,a~z)转为数字
	public int toInt(char c) {
		if ('0' <= c && c <= '9') {
			return c - '0';//char到int,可以隐式转化
		} else {
			return 10 + c - 'a';
		}
	}
	//把一个数字转为36进制字符
	public char toChar(int n) {
		if (0 <= n && n <= 9) {
			return (char) (n + '0');//int到char,需要显式强制转化
		} else {
			return (char) (n - 10 + 'a');
		}
	}

	public static void main(String[] args) {
		Add a = new Add();
		System.out.println(a.add("1b", "2x"));
	}
}