题目地址:
https://www.lintcode.com/problem/1398/
给定一个整数 k k k满足 2 ≤ k ≤ 10 2\le k\le 10 2≤k≤10,再给定两个字符串表示的 k k k进制的数 a a a和 b b b,求 a a a和 b b b的和,注意去掉前导 0 0 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
StringBuilder sb = new StringBuilder();
int t = 0;
for (int i = a.length() - 1, j = b.length() - 1; i >= 0 || j >= 0; ) {
if (i >= 0) {
t += a.charAt(i) - '0';
i--;
}
if (j >= 0) {
t += b.charAt(j) - '0';
j--;
}
sb.append(t % k);
t /= k;
}
if (t > 0) {
sb.append(1);
}
// 去掉前导0
for (int i = sb.length() - 1; i >= 1; i--) {
if (sb.charAt(i) != '0') {
sb.setLength(i + 1);
break;
}
}
return sb.reverse().toString();
}
}
时空复杂度 O ( max { l a , l b } ) O(\max \{l_a,l_b\}) O(max{la,lb})。