1398. K进制加法
- 给出一个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。
- 可能有前导零
code
class Solution {
public:
/**
* @param k: The k
* @param a: The A
* @param b: The B
* @return: The answer
*/
string addition(int k, string &a, string &b) {
// Write your code here
string sum;
sum.reserve((a.size() > b.size()) ? a.size() : b.size());
int index_a = a.size() - 1;
int index_b = b.size() - 1;
int bit = 0;
while (index_a >= 0 && index_b >= 0)
{
char t = a[index_a] - '0' + b[index_b] - '0' + bit;
bit = t / k;
sum.push_back(t % k + '0');
--index_a;
--index_b;
}
if (index_a >= 0)
{
while (index_a >=0)
{
char t = (a[index_a] - '0' + bit);
bit = t / k;
sum.push_back(t % k + '0');
--index_a;
}
}
if (index_b >= 0)
{
while (index_b >= 0)
{
char t = (b[index_b] - '0' + bit);
bit = t / k;
sum.push_back(t % k + '0');
--index_b;
}
}
if (bit != 0)
sum.push_back(bit + '0');
//去除前导0;
while (true)
{
if (sum[sum.size() - 1] == '0')
sum.pop_back();
else
break;
}
reverse(sum.begin(), sum.end());
return sum;
}
};