/**
* 36进制由0-9,a-z,共36个字符表示,最小为'0'
* '0''9'对应十进制的0 9,'a''z'对应十进制的10 35
* 例如:'1b' 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47
* 要求按照加法规则计算出任意两个36进制正整数的和
* 如:按照加法规则,计算'1b' + '2x' = '48'
*
* 要求:不允许把36进制数字整体转为10进制数字,计算出10进制数字的相加结果再转回为36进制
*
* @param args
*/
public String addString(String str1, String str2) {
StringBuilder sb = new StringBuilder();
int len1 = str1.length();
int len2 = str2.length();
String symbol = "0123456789abcdefghijklmnopqrstuvwxyz";
int i = len1-1;
int j = len2-1;
int carry = 0;
for (; i >= 0 || j >= 0; i--,j--) {
int num1 = 0;
if (i >= 0)
num1 = getNumByChar(str1.charAt(i));
int num2 = 0;
if (j >= 0)
num2 = getNumByChar(str2.charAt(j));
int sum = num1 + num2 + carry;
if (sum >= 36) {
carry = 1;
char c = symbol.charAt(sum - 36);
sb.append(c);
} else {
carry = 0;
char c = symbol.charAt(sum);
sb.append(c);
}
}
if (carry == 1) {
sb.append(symbol.charAt(carry));
}
return sb.reverse().toString();
}
private int getNumByChar(char c) {
if (c >= '0' && c <= '9') {
return c - '0';
} else if (c >= 'a' && c <= 'z') {
return c - 'a' + 10;
}
return -1;
}
字符串相加 36进制数
最新推荐文章于 2023-01-29 10:13:37 发布