题目
题目
实现一个 36 进制的加法 0-9 a-z。示例
输入:[“abbbb”,“1”],输出:“abbbc”
代码
import java.util.Scanner;
public class add36 {
public static void main(String[] args) {
String num1 = "";
String num2 = "";
Scanner re = new Scanner(System.in);
num1 = re.next();
num2 = re.next();
System.out.println(num1 + " + " + num2 + " = " + res(num1, num2));
}
private static String res(String num1, String num2){
// 这个是进位,每次相加后超过36时向前进位1(和十进制类似)
int carry = 0;
int i = num1.length() - 1;
int j = num2.length() - 1;
StringBuilder sb = new StringBuilder();
while (i >= 0 || j >= 0 || carry != 0){
// 判断两个字符串是否循环结束,如果结束就赋值为0, 否则就是原来的值 这里 a ~ z = 10 ~ 35;
int x = i >= 0 ? intChange(num1.charAt(i)) : 0;
int y = j >= 0 ? intChange(num2.charAt(j)) : 0;
int sum = x + y + carry;
// sum 和的余数添加到sb中
sb.append(getChar(sum % 36));
carry = sum / 36;
i--;
j--;
}
return sb.reverse().toString();
}
private static int intChange(char c){
if (c >= '0' && c <= '9') {
return c - '0';
}else {
return c - 'a' + 10;
}
}
private static char getChar(int num){
if (num <= 9){
return (char) ('0' + num);
}else return (char) (num - 10 + 'a');
}
}