给出一个k
,a
,b
,代表a
和b
都是一个k
进制的数,输出a + b的k
进制数。
样例
样例1
输入: k = 3, a = "12", b = "1"
输出: 20
解释:
12 + 1 = 20 in 3 bases.
样例2
输入: k = 10, a = "12", b = "1"
输出: 13
解释:
12 + 1 = 13 in 10 bases.
注意事项
2 <= k <= 10
- a, b均为字符串,长度不超过
1000
。 - 可能有前导零
解题思路:
按照从后向前依次处理即可。
注意处理前导0和最后的进位。
public class Solution {
/**
* @param k: The k
* @param a: The A
* @param b: The B
* @return: The answer
*/
public String addition(int k, String a, String b) {
// Write your code here
if(a == null || b == null || a.length() == 0 || b.length() == 0)
return "0";
//去除前导0
int i;
for(i = 0; i < a.length(); i++)
if(a.charAt(i) != '0')
break;
a = a.substring(i);
for(i = 0; i < b.length(); i++)
if(b.charAt(i) != '0')
break;
b = b.substring(i);
int p = a.length() - 1;
int q = b.length() - 1;
int cnt = 0;
StringBuilder sb = new StringBuilder();
while(p >= 0 && q >= 0){
int tmp = (a.charAt(p) - '0') + (b.charAt(q) - '0') + cnt;
cnt = tmp / k;
sb.insert(0, tmp % k);
p--;
q--;
}
while(p >= 0){
int tmp = (a.charAt(p) - '0') + cnt;
cnt = tmp / k;
sb.insert(0, tmp % k);
p--;
}
while(q >= 0){
int tmp = (b.charAt(q) - '0') + cnt;
cnt = tmp / k;
sb.insert(0, tmp % k);
q--;
}
if(cnt != 0)
sb.insert(0, cnt);
return sb.toString();
}
}