public String add(String stra,String strb) {
StringBuilder ret = new StringBuilder();
int lena = stra.length();
int lenb = strb.length();
int la = 0,lb = 0;
while(la < lena - 1 && stra.charAt(la) == ‘0‘) la ++;
while(lb < lenb - 1 && strb.charAt(lb) == ‘0‘) lb ++;
String newa = stra.substring(la,lena);
String newb = strb.substring(lb,lenb);
lena = newa.length();
lenb = newb.length();
int[] numa = new int[lena];
int[] numb = new int[lenb];
for(int i = 0;i < lena; ++i) numa[i] = newa.charAt(lena - i - 1) - ‘0‘;
for(int i = 0;i < lenb; ++i) numb[i] = newb.charAt(lena - i - 1) - ‘0‘;
int carry = 0;
for(int i = 0;i < lena || i < lenb; ++i) {
if(i < lena) carry += numa[i];
if(i < lena) carry += numb[i];
ret.append(carry % 10);
carry /= 10;
}
if(carry > 0) ret.append(carry);
return ret.reverse().toString();
}
public char getChar(int num) {
if(num <= 9) return (char)(num + ‘0‘);
else return (char)(num - 10 + ‘a‘);
}
public int getInt(char ch) {
if(ch >= ‘0‘ && ch <= ‘9‘) return ch - ‘0‘;
else return ch - ‘a‘ + 10;
}
public String add36(String stra,String strb) {
StringBuilder ret = new StringBuilder();
int lena = stra.length();
int lenb = strb.length();
int la = 0,lb = 0;
while(la < lena - 1 && stra.charAt(la) == ‘0‘) la ++;
while(lb < lenb - 1 && strb.charAt(lb) == ‘0‘) lb ++;
String newa = stra.substring(la,lena);
String newb = strb.substring(lb,lenb);
lena = newa.length();
lena = newb.length();
int[] numa = new int[lena];
int[] numb = new int[lenb];
for(int i = 0;i < lena; ++i) numa[i] = getInt(newa.charAt(lena - i - 1));
for(int i = 0;i < lena; ++i) numb[i] = getInt(newb.charAt(lena - i - 1));
int carry = 0;
for(int i = 0;i < lena || i < lenb; ++i) {
if(i < lena) carry += numa[i];
if(i < lena) carry += numb[i];
ret.append(getChar(carry % 36));
carry /= 36;
}
if(carry > 0) ret.append(getChar(carry));
return ret.reverse().toString();
}
原文:https://www.cnblogs.com/lukelmouse/p/14532194.html